资产被过滤掉,不会被投放:添加`config.assets.precompile

我刚从4.1.rc2移植我的应用程序到rails 4.1.0 。 开始为我的JS文件获取这些错误

 ActionView::Template::Error: Asset filtered out and will not be served: add `config.assets.precompile += %w( my_js )` to `config/application.rb` and restart your server 

为了响应Heroku的要求,Rails的维护人员将sprockets_better_errors gem的健全性检查合并到了Rails 4.1中。 请参阅https://github.com/rails/sprockets-rails/pull/84

目的在于揭示在开发模式下运行应用程序时,您将在生产中看到的资产pipe道错误。

您可能正在应用程序布局中使用javascript_include_tag ,而不是将您的JavaScript文件放在app / assets / javascripts /文件夹中。

你可以把你的文件移动到app / assets / javascripts /文件夹。

或者,您需要更新您的config / application.rb文件以包含:

 config.assets.precompile += %w( my_js ) 

请注意,文件名不应包含.js文件扩展名。

如果你已经在你的应用程序布局头文件中添加了类似stylesheet_link_tag params[:controller]东西,因为在不同的控制器上有不同的JS应用程序,但是具有相同的基本布局,你会对此感到恼火。 快速的方法来解决这个问题,并继续工作(但可能不是最终的解决scheme),所有的资源预编译是添加到/config/initializers/assets.rb:

 Rails.application.config.assets.precompile += [/.*\.js/,/.*\.css/] 

请注意,这是因为它甚至是.js.coffee.css.scss.js.css就足够了。

理想情况下,@zilojko解决scheme的工作原理,但我也有这个应用程序中的活跃pipe理..因此,看了一会儿,我发现以下解决scheme:

 Rails.application.config.assets.precompile += %w(*.svg *.eot *.woff *.ttf *.gif *.png *.ico) Rails.application.config.assets.precompile << /\A(?!active_admin).*\.(js|css)\z/ 

只需将上面的行添加到:/config/initializers/assets.rb

上面的代码在跳过活动pipe理文件的同时预编译资产。 这样它们不会被处理两次或者出错导致错误。

是的,阅读浏览器上的错误,我所做的只是添加下面的代码行:

 Rails.application.config.assets.precompile += %w( depot.css ) 

到/config/initializers/assets.rb文件,它的工作。

你可能会从你的erb中取消<%= javascript_include_tag 'xxx' %> ,并在assets/javascript/name_space/index.js.coffee中添加这个

 #= require ./xxx