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

问题描述 投票:45回答:5

我刚刚将我的应用程序从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
ruby-on-rails-4 ruby-on-rails-4.1
5个回答
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文件扩展名。


32
投票

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

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

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


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
投票

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

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

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


0
投票

你可以从你的erb中删除qazxsw poi,并在你的qazxsw poi中添加这个

<%= javascript_include_tag 'xxx' %>
© www.soinside.com 2019 - 2024. All rights reserved.