2017-03-29 25 views
2

我嘗試了儘可能多的潛在解決方案,因爲我可以找到並且迄今爲止沒有任何工作。 .js文件中的代碼沒有被執行,也沒有出現在客戶端瀏覽器中的任何地方。無法在Rails中加載控制器特定的JavaScript文件(5+)

application.html.erb負載該部分在頭:

<%= csrf_meta_tags %> 
<%= stylesheet_link_tag "application", params[:controller], media: "all" %> 
<%= javascript_include_tag "application", params[:controller] %> 

配置/初始化/ assets.rb

%w( articles password_resets sessions static_pages users).each do |controller| 
    Rails.application.config.assets.precompile += ["#{controller}.js.coffee", "#{controller}.css"] 
end 

[控制器名稱這裏] .js文件

$(document).ready(function() { 
    alert('My controller'); 
}); 

在瀏覽器中,當上面的所有內容保持原樣時,將會有一個名爲'[controller-name] .self.longstringhere.j的資產S'體= 1’ 。它會有這個代碼:

(function() { 


}).call(this); 

......這在我的項目中沒有任何地方存在。如果我從assets.rb中刪除控制器,當試圖從該控制器加載頁面時,它會引發錯誤[如預期的那樣]。當擺脫應用程序佈局中的條目時,瀏覽器的資產中缺少'[controller] .self.js'文件[如預期的那樣]。但是,無論控制器的任何js文件是否丟失都不會導致錯誤,並且不會妨礙瀏覽器的資產包含'[controller] .self.js'。這就像app/assets/javascripts中的文件完全被忽略並被「剔除」。

注意:我特別沒有'// = require_tree'。和'* = require_tree'。在application.js/.css文件中,因爲我特別按照說明here。這是故意的。

我也刪除了我可以找到的所有引用(寶石的,資產等)turbolinks,因爲我一直在閱讀,這可能會導致可能與此問題有關的惡事發生。

我也重新啓動了服務器,預編譯了資源,並且多次完成了這個和其他幾個儀式化的事情 - 都無濟於事。

爲了記錄,我還將assets.rb中的「#{controller} .js.coffee」更改爲'.js',但無濟於事。但我讀到,這是沒有必要的。

這個問題是所有控制器的 - 不只是一個特別的。

感謝您的幫助!

[編輯]我創建了一個新的Rails項目用腳手架和遵循同樣的程序(但要確保預編譯的資產(posts.js)是專門由assets.rb名字叫出來),並有同樣的問題如上所述,在瀏覽器的posts.blahblah.js文件中包含相同的JavaScript「存根」代碼。

+0

它應該工作,但要確保控制器名稱和js/css文件名應該相同,如果您的控制器名稱是'rooms_controller.rb',那麼js應該是'rooms.coffee或room.js等...' – ashvin

+0

我試着直接對控制器的資產名稱進行硬編碼以獲得更好的效果。 (始終記住重新啓動服務等)。 – vicmorrowshead

回答

0

好像你的文件名是[controller-name-here].js,你正在使用js不是咖啡。

但是您在config/initializers/assets.rb文件中添加咖啡文件。這就是爲什麼它無法正確編譯文件。 試着改變你的config/initializers/assets.rb文件象下面這樣:

%w( articles password_resets sessions static_pages users).each do |controller| 
    Rails.application.config.assets.precompile += ["#{controller}.js", "#{controller}.css"] 
end 

一切似乎罰款。

+0

這是我的第一個想法之一,它並沒有幫助。我再次嘗試了很好的措施。我也對控制器的.js文件名進行了硬編碼。無論哪種方式,根據此http://guides.rubyonrails.org/asset_pipeline.html#controller-specific-assets,預編譯僅對於css和coffeescript是必需的。這一個讓我很好。同樣,.js資產在瀏覽器中顯示爲「存根」,就像我在評論中提到的那樣 - 而不是我的代碼。我試過耙tmp:緩存:清除以及。 – vicmorrowshead

+0

問題是咖啡劇本。我沒有使用它。我已經刪除了所有對它的引用(除了寶石)。 Coffeescript在預編譯時解析爲controller-name.js。這會導致相同名稱的文件被忽略。如果我更改名稱並相應地更新所有內容,它就可以正常工作。但是,我無法擺脫咖啡標記。一旦我刪除了gem,一切都會失敗(導軌資產:預編譯 - >'LoadError:無法加載這樣的文件 - coffee_script';去任何頁面 - >'無法加載這樣的文件 - coffee_script'等等。已清除緩存,以及其他任何我能找到的。 – vicmorrowshead

+0

如果您有任何帶有.coffee擴展名的文件,則會導致此錯誤。 – Mike

相關問題