宝石更新后:测试失败,“未声明生产中已预编译资产”

问题描述 投票:43回答:4

因为我更新了几个gem,所以所有测试都失败,并显示以下错误:

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更新之前,所有通过的测试。

我使用Rails 4.2.5。更新的宝石之一是sprockets(将链轮更新为3.5.2版)。我在github上读到了有关链轮4的问题,但我没有使用版本4。


P.S。即使将Rails.application.config.assets.precompile += %w( favicons/manifest.json.erb )添加到config/initializers/assets.rb,错误仍然存​​在。但是,即使那样行得通,我也想了解为什么会出现此问题,除了更新某些gem之外无需进行任何更改。

ruby-on-rails ruby asset-pipeline sprockets
4个回答
56
投票

详细回答+解释

我认为正确的解决方法是按照错误消息的建议将文件添加到预编译的资产中。也许这不能为您解决问题,因为您有一个需要在运行时呈现的erb文件。我想如果该文件是静态json文件,那么将其添加到预编译资产后,您仍然不会遇到问题。

[使用image_path帮助程序时,Sprockets假定您拥有静态资产。您的应用在sprockets-rails 3.0之前没有引发错误的事实有些令人惊讶。显然,这个新版本在执行标准方面做得更好。 (看起来3.0还有其他问题,可能很快就会更新)

如果您需要在清单中包含erb,则最佳做法是使用路由路径帮助程序而不是image_pathasset_path来获取网址。这将需要您向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来修复它。不幸的是,它没有使我的测试通过。


6
投票

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


ActionView :: Template :: Error(未声明资产在生产中已预编译。将Rails.application.config.assets.precompile += %w( rails.png )添加到config/initializers/assets.rb并重新启动服务器):10:11:12:13:http://rubyonrails.org/'%>app / views / static_pages / home.html.erb:13:`_app_views_static_pages_home_html_erb ___ 1806898863626708249_70312070486240'


5
投票

尽管人们给出了很长的答案,但我建议答案非常简单明了只需转到

config / initializers / assets.rb

添加以下行

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

其中style.css可以用您的CSS的任何文件名替换


0
投票

我有类似的错误,必须编辑manifest.js文件才能使其正常工作。

编辑/assets/config.manifest.js,然后

// manifest.js
//= link_tree ../images
//= link_tree ../stylesheets .css

然后执行bundle exec rake assets:precompile

© www.soinside.com 2019 - 2024. All rights reserved.