gem更新后:testing失败,“资产没有被宣布在生产中预编译”

由于我更新了几个gem,所有的testing失败,错误:

ActionView :: Template :: Error:资产没有被声明为在生产中预编译。

Rails.application.config.assets.precompile += %w( favicons/manifest.json.erb )config/initializers/assets.rb并重新启动服务器

app / views / layouts / _faviconsheader.html.erb:14:in _app_views_layouts__faviconsheader_html_erb__1320

app / views / layouts / application.html.erb:21:in _app_views_layouts_application_html_erb__4340

该错误似乎是指包含以下行的部分_faviconsheader.html.erb

 <%= content_tag :link, nil, rel: :manifest, href: image_path("favicons/manifest.json.erb") %> 

这个部分被加载到application.html.erb<%= render partial: 'layouts/faviconsheader' %>

任何想法是什么导致这个错误,该怎么办? 在gem更新之前所有的testing都通过了。

我使用Rails 4.2.5。 其中一个更新的gem是sprockets (更新的链轮到版本3.5.2)。 我读了一些关于链接4有问题的github ,但是我没有使用第四版。


PS即使我将Rails.application.config.assets.precompile += %w( favicons/manifest.json.erb )config/initializers/assets.rb ,错误仍然存​​在。 但即使这样做,我会想明白为什么这个问题来了,没有任何改变,除了更新一些gem。

长答案+解释

我认为正确的解决方法是将该文件添加到预编译的资产,如错误消息所build议的。 也许这不是解决你的问题,因为你有一个需要在运行时渲染的erb文件。 我想如果这个文件是一个静态的json文件,那么在将它添加到预编译的资源之后,您还是不会遇到这个问题。

当你使用image_path helper时,Sprockets会假设你有一个静态资源。 事实上,你的应用程序没有提出错误之前, sprockets-rails 3.0有些令人惊讶。 这个新版本显然是在执行标准方面做得更好。 (它也看起来像3.0还有其他问题,可能会很快更新)

如果您需要在清单中有erb,那么最好使用pathpath助手而不是image_pathasset_path来获取url。 这将要求你添加一个清单路由到你的config/routes.rb文件,并通过一个控制器动作来呈现json文件。 视图文件将是您的.erb清单。


简答

这发生在我进行bundler update ,将我的sprockets-rails版本从2.3.3更改为3.0.0。 一个简单的解决方法是在您的Gemfile中将sprockets-rails恢复到版本2.3.3并再次运行bundle install

gem 'sprockets-rails', '2.3.3'

顺便说一句:我在开发环境中遇到了这个问题,并且能够通过运行rake assets:precompile来修复它rake assets:precompile 。 不幸的是,它没有让我的testing通过。

我有类似的错误。 我没有修改assets.rb或任何东西,只是重新启动我的服务器,没有错误了。


ActionView :: Template :: Error(Asset没有被声明为在生产环境中被预编译,将Rails.application.config.assets.precompile += %w( rails.png )config/initializers/assets.rb并重新启动服务器) :10:<%= link_to“现在注册!”,“#”,class:“btn btn-lg btn-primary”%> 11:12:13:<%= link_to image_tag(“rails.png”,alt :“Rails logo”),14:' http ://rubyonrails.org/'%> app / views / static_pages / home.html.erb:13:in _app_views_static_pages_home_html_erb___1806898863626708249_70312070486240'

虽然人们已经给出了很长的答案,我build议非常简单和简洁的答案只要去

config / initializers / assets.rb

添加以下行

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

其中style.css可以被你的任何文件名replace为CSS