1

我正在挣扎。Rails 5 - JS在生产环境中不工作(仅)

我有我的应用程序/ assets/javascripts文件夹中的一系列js文件的rails 5应用程序。这些文件中的js在开发环境中工作得很好,但是当我在heroku上发布时,它停止工作。

我可以从Chrome检查器看到,从网络选项卡中可见的application.js文件显示了我应用程序中js文件的内容。这只是在生产中似乎没有做任何事情。没有控制台错误出现在Chrome控制台中。

我可以从this post看到有一系列的事情可以尝试。我已经尝试了所有这些。我甚至创建了一个全新的应用程序,并一次添加了js文件,以查看是否存在需要以其他顺序执行某些操作(主要是猜测)的临界点 - 但这无法解决问题。

我可以看到this article一个建议是:

# Don't fallback to assets pipeline if a precompiled asset is missed 
config.assets.compile = false 

,然后尝试:

rake assets:clean assets:precompile 

我尝试每一种建议,而仍然无法发现问题。

如果我写js的方式有错误,我希望能够在我的开发和生产环境控制台检查器中使用chrome。在任一环境中都不会显示错误。

如果生产环境读取js文件时出现问题,我很困惑为什么我可以在文件中搜索js文件中使用的单词,我可以从网络选项卡打开并查看正确的文本。

我该如何解决这个问题?

我的相关文件有:

应用程序/资产/ Java脚本/ application.js中

//= require jquery 
//= require jquery_ujs 
//= require turbolinks 
//= require jquery-fileupload/vendor/jquery.ui.widget 
//= require jquery-fileupload/jquery.iframe-transport 
//= require jquery-fileupload/jquery.fileupload 
//= require bootstrap-sprockets 
//= require moment 
//= require bootstrap-datetimepicker 
//= require pickers 
// require underscore 
// require gmaps/google 
//= require markerclusterer 
//= require cocoon 
//= require cable 
//= require_tree . 

配置/初始化/ assets.rb

# Be sure to restart your server when you modify this file. 
# Version of your assets, change this if you want to expire all your assets. 
Rails.application.config.assets.version = '1.0' 

# Add additional assets to the asset load path 
# Rails.application.config.assets.paths << Emoji.images_path 

# Precompile additional assets. 
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. 
# Rails.application.config.assets.precompile += %w(search.js) 

配置/ production.rb

# Do not fallback to assets pipeline if a precompiled asset is missed. 
    config.assets.compile = false 

在生产环境中不工作的相关文件保存在app/assets/javscripts/stance/commercial.js中(因此它应该在application.js中由// = require_tree标识。

这个文件有:

jQuery(document).ready(function() { 
    jQuery('[name="organisation[commercial_attributes][standard_financial_split]"]').on('click', function() { 
     if (jQuery(this).val() == 'true') { 
      jQuery('#commercial_standard_financial_split_content').removeClass('hidden'); 
     } else { 
      jQuery('#commercial_standard_financial_split_content').removeClass('hidden').addClass('hidden'); 
     } 
    }); 

}); 

任何人都可以用用于获取JS在生产环境中使用的过程中提供帮助?

我没有建议尝试的东西,这不是教程,代码学校(我是代码学校的学生,走轨道,udemy和有一百万本书)的东西,但可以找不到解决这个问题的参考点。

+0

你有没有探究过?这个问题已经在这个网站上回答了很多。另外,这里是关于这个问题的Heroku文档:https://devcenter.heroku.com/articles/rails-4-asset-pipeline。我一直只包括12个因素宝石。 – steel

+0

嗨@steel。是的 - 我一直在努力多年。我尝试了我链接的SO帖子中列出的所有内容,以及我链接的博客文章中的所有内容。 Heroku的文档讲到rails 3和4.我正在使用Rails 5.我没有运行特定的预编译命令,因为我可以从Rails配置文件(assets.rb)看到这是我的文件结构配置的一部分。我还可以从我的控制台日志中看到,当我推送到heroku时,资产正在预编译:为Rails资产管道准备应用程序 remote:运行:rake资产:预编译 remote:资产预编译完成(3.51s) – Mel

+0

谢谢也用于参考12因素宝石。我在使用rails 4时试图解决这个问题 - 但它不再是rails 5的一部分。 – Mel

回答

0

对我来说,解决方案是从我的application.html.erb的标题中删除javascript包含标签到身体下方。这解决了我在我的问题中引用的js文件的问题。

但是,这现在已经打破了我的谷歌地图JavaScript,所以我不确定这实际上是一个很好的解决方案。

相关问题