gem 更新后:测试失败 "Asset was not declared to be precompiled in production"
After gem update: test fail with "Asset was not declared to be precompiled in production"
自从我更新了几个 gem 之后,所有测试都失败并出现错误:
ActionView::Template::Error: Asset was not declared to be precompiled
in production.
Add Rails.application.config.assets.precompile += %w( favicons/manifest.json.erb )
to config/initializers/assets.rb
and restart your server
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。 gem 更新之一是 sprockets
(将链轮更新到版本 3.5.2)。我在 github 上读到一些关于 sprockets 4 有问题的内容,但我没有使用版本 4。
P.S。即使我将 Rails.application.config.assets.precompile += %w( favicons/manifest.json.erb )
添加到 config/initializers/assets.rb
,错误仍然存在。但即使那样行得通,我也想了解为什么会出现这个问题,除了更新一些 gems.
之外没有任何更改
长答案+解释
我认为正确的解决方法是按照错误消息的建议将文件添加到预编译资产中。也许这不能解决您的问题,因为您有一个需要在 运行 时间呈现的 erb 文件。我想如果该文件是一个静态 json 文件,那么在将它添加到预编译资产后您仍然不会遇到这个问题。
当您使用 image_path
助手时,Sprockets 会假设您拥有静态资产。您的应用在 sprockets-rails
3.0 之前没有引发错误这一事实有些令人惊讶。显然,这个新版本在执行标准方面做得更好。 (看起来 3.0 还有其他问题,可能会很快更新)
如果您需要在清单中包含 erb,那么最好使用路由路径助手而不是 image_path
或 asset_path
来获取 url。这将要求您向 config/routes.rb
文件添加清单路由,并通过控制器操作呈现 json 文件。视图文件将是您的 .erb
清单。
简答
在执行 bundler update
将我的 sprockets-rails
版本从 2.3.3 更改为 3.0.0 后,我开始遇到这种情况。一个简单的解决方法是在 Gemfile 中将 sprockets-rails
恢复到版本 2.3.3 并再次 运行ning bundle install
:
gem 'sprockets-rails', '2.3.3'
顺便说一句:我在开发环境中遇到了这个问题,并且能够通过 运行ning rake assets:precompile
解决它。不幸的是,它没有让我的测试通过。
我遇到了类似的错误。
我没有修改 assets.rb 或任何东西,只是重新启动我的服务器并且没有错误了。
ActionView::Template::Error(资产未声明为在生产中预编译。
将 Rails.application.config.assets.precompile += %w( rails.png )
添加到 config/initializers/assets.rb
并重新启动服务器):
10: <%= link_to "Sign up now!", '#', 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:在`_app_views_static_pages_home_html_erb___1806898863626708249_70312070486240'
虽然人们给出了很长的答案我建议非常简单和简洁的答案
只需转到
config/initializers/assets.rb
and
添加以下行
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
自从我更新了几个 gem 之后,所有测试都失败并出现错误:
ActionView::Template::Error: Asset was not declared to be precompiled in production.
Add
Rails.application.config.assets.precompile += %w( favicons/manifest.json.erb )
toconfig/initializers/assets.rb
and restart your serverapp/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。 gem 更新之一是 sprockets
(将链轮更新到版本 3.5.2)。我在 github 上读到一些关于 sprockets 4 有问题的内容,但我没有使用版本 4。
P.S。即使我将 Rails.application.config.assets.precompile += %w( favicons/manifest.json.erb )
添加到 config/initializers/assets.rb
,错误仍然存在。但即使那样行得通,我也想了解为什么会出现这个问题,除了更新一些 gems.
长答案+解释
我认为正确的解决方法是按照错误消息的建议将文件添加到预编译资产中。也许这不能解决您的问题,因为您有一个需要在 运行 时间呈现的 erb 文件。我想如果该文件是一个静态 json 文件,那么在将它添加到预编译资产后您仍然不会遇到这个问题。
当您使用 image_path
助手时,Sprockets 会假设您拥有静态资产。您的应用在 sprockets-rails
3.0 之前没有引发错误这一事实有些令人惊讶。显然,这个新版本在执行标准方面做得更好。 (看起来 3.0 还有其他问题,可能会很快更新)
如果您需要在清单中包含 erb,那么最好使用路由路径助手而不是 image_path
或 asset_path
来获取 url。这将要求您向 config/routes.rb
文件添加清单路由,并通过控制器操作呈现 json 文件。视图文件将是您的 .erb
清单。
简答
在执行 bundler update
将我的 sprockets-rails
版本从 2.3.3 更改为 3.0.0 后,我开始遇到这种情况。一个简单的解决方法是在 Gemfile 中将 sprockets-rails
恢复到版本 2.3.3 并再次 运行ning bundle install
:
gem 'sprockets-rails', '2.3.3'
顺便说一句:我在开发环境中遇到了这个问题,并且能够通过 运行ning rake assets:precompile
解决它。不幸的是,它没有让我的测试通过。
我遇到了类似的错误。 我没有修改 assets.rb 或任何东西,只是重新启动我的服务器并且没有错误了。
ActionView::Template::Error(资产未声明为在生产中预编译。
将 Rails.application.config.assets.precompile += %w( rails.png )
添加到 config/initializers/assets.rb
并重新启动服务器):
10: <%= link_to "Sign up now!", '#', 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:在`_app_views_static_pages_home_html_erb___1806898863626708249_70312070486240'
虽然人们给出了很长的答案我建议非常简单和简洁的答案 只需转到
config/initializers/assets.rb and
添加以下行
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