2017-03-29 16 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

相关问题