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,所以我不確定這實際上是一個很好的解決方案。

相關問題