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

Ank*_*itG 44 ruby-on-rails-4 ruby-on-rails-4.1

我刚刚迁移到我的Rails应用程序4.1.0从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
Run Code Online (Sandbox Code Playgroud)

Dan*_*hoe 50

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

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

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

您可以将文件移动到app/assets/javascripts /文件夹.

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

config.assets.precompile += %w( my_js )
Run Code Online (Sandbox Code Playgroud)

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

  • 这不是一个好理由.不是每个人都使用Heroku,这真的给我带来了麻烦.我们不应该在开发中预编译我们的自定义.js或.css文件.这就是我们首先拥有开发模式的部分原因. (43认同)
  • 哇,得爱这些Rails circlejerk /功能 (2认同)

zmi*_*jko 32

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

Rails.application.config.assets.precompile += [/.*\.js/,/.*\.css/]
Run Code Online (Sandbox Code Playgroud)

请注意,这是因为它甚至对于.js.coffee和.css.scss,.js和.css是不够的.

  • @Dimitry,这是因为预编译的整个想法是将特定目的所需的所有文件都包含在一个文件中.因此,只有您的"顶级"文件才应包含在此列表中,并且应使用`// = require ...`指令将自己需要的内容包含在内.我上面的解决方案有助于开发,但是如果你做一些像"rake assets:precompile"这样的东西,你最终会得到一大堆永远不需要服务的文件.例如,如果你有一个Angular项目,其中每个指令/控制器/模板是一个单独的文件,你可以轻松拥有100多个文件...... (3认同)

whi*_*eed 5

理想情况下,@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/
Run Code Online (Sandbox Code Playgroud)

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

上面的代码在跳过活动管理文件的同时预编译资产。以便它们不会被处理两次或不按顺序处理导致错误。