资产已过滤掉,不会被提供:添加`config.assets.precompile

时间:2014-04-09 18:06:21

标签: ruby-on-rails-4 ruby-on-rails-4.1

我刚从4.1.0将我的应用程序迁移到rails 4.1.rc2。开始为我的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

5 个答案:

答案 0 :(得分:51)

响应来自Heroku的敦促,Rails维护者已将sprockets_better_errors gem中的健全性检查合并到Rails 4.1中。见https://github.com/rails/sprockets-rails/pull/84

目的是揭示在开发模式下运行应用时您将在生产中看到的资产管道错误。

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

您可以将文件移至 app / assets / javascripts / 文件夹。

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

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

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

答案 1 :(得分:32)

如果您在应用程序布局标题中添加了stylesheet_link_tag params[:controller]之类的内容,因为在不同的控制器上有不同的JS应用程序,但具有相同的基本布局,您会对此非常恼火。使用预编译的所有资产快速完成此操作并继续工作(但可能不是最终解决方案)的方法是将以下内容添加到/config/initializers/assets.rb中:

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

请注意,即使对于.js.coffee.css.scss.js.css也足够了。

答案 2 :(得分:4)

理想情况下,@ zmilojko的解决方案有效,但我在此应用程序中也有活跃的管理员..因此,在进一步了解后,我找到了以下解决方案:

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

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

答案 3 :(得分:3)

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

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

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

答案 4 :(得分:0)

你可能会从你的erb中发现<%= javascript_include_tag 'xxx' %>,并在你assets/javascript/name_space/index.js.coffee中追加

#= require ./xxx