因为我更新了几个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之外无需进行任何更改。
详细回答+解释
我认为正确的解决方法是按照错误消息的建议将文件添加到预编译的资产中。也许这不能为您解决问题,因为您有一个需要在运行时呈现的erb文件。我想如果该文件是静态json文件,那么将其添加到预编译资产后,您仍然不会遇到问题。
[使用image_path
帮助程序时,Sprockets假定您拥有静态资产。您的应用在sprockets-rails
3.0之前没有引发错误的事实有些令人惊讶。显然,这个新版本在执行标准方面做得更好。 (看起来3.0还有其他问题,可能很快就会更新)
如果您需要在清单中包含erb,则最佳做法是使用路由路径帮助程序而不是image_path
或asset_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
来修复它。不幸的是,它没有使我的测试通过。
我遇到类似的错误。我没有修改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'
尽管人们给出了很长的答案,但我建议答案非常简单明了只需转到
config / initializers / assets.rb和
添加以下行
Rails.application.config.assets.precompile + =%w(style.css]]
其中style.css可以用您的CSS的任何文件名替换
我有类似的错误,必须编辑manifest.js文件才能使其正常工作。
编辑/assets/config.manifest.js
,然后
// manifest.js
//= link_tree ../images
//= link_tree ../stylesheets .css
然后执行bundle exec rake assets:precompile