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

ActionView::Template::Error:未声明要预编译的assets资源

Rails.application.config.assets.precompile += %w( favicons/manifest.json.erb )添加到config/initializers/assets.rb,然后重新启动服务器

app/views/layouts/_faviconheader.html.雇员再培训局:14:_app_views_layouts__faviconsheader_html_erb__1320

应用程序/视图/布局/应用程序.html.雇员再培训局:21:_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' %>加载的.

你知道是什么导致了这个错误,该怎么办吗?Before the gem update all tests passed.

我使用Rails 4.2.5.其中一个gems更新为sprockets(链轮更新为3.5.2版).我在github上读到一些关于链轮4有问题的文章,但我没有使用版本4.


另外,即使我把Rails.application.config.assets.precompile += %w( favicons/manifest.json.erb )加到config/initializers/assets.rb,错误仍然存在.但即使这样做有效,我也会想知道为什么会出现这个问题,除了更新一些gems之外,没有任何改变.

推荐答案

Long Answer + Explanation

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

使用image_path辅助对象时,链轮假定您拥有静态资源.你的应用在sprockets-rails3.0之前没有出现错误,这有点令人惊讶.显然,新版本在执行标准方面做得更好.(看起来3.0还存在其他问题,可能很快就会更新)

如果需要在 list 中包含erb,那么最好使用route path helper而不是image_pathasset_path来获取url.这需要向config/routes.rb文件添加 list 路由,并通过控制器操作呈现json文件.视图文件将是您的.erb list .


Short Answer

这一点在我完成了一个将sprockets-rails版本从2.3.3改为3.0.0的bundler update之后开始发生.一个简单的修复方法是在Gemfile中将sprockets-rails恢复到2.3.3版本,然后再次运行bundle install:

gem 'sprockets-rails', '2.3.3'

顺便说一句:我在开发环境中遇到了这个问题,通过运行rake assets:precompile就可以解决这个问题.不幸的是,我的考试没有通过.

Ruby-on-rails相关问答推荐

Ubuntu Webhooks无法读取安装的正确RVM Ruby

用变量替换 find_or_create_by 中的键

Sweet Alert 2 在 Rails 7 应用程序中无法正常工作

Rails 控制台 - 更新 Gem 后的弃用通知

插件和 Ruby gem 之间的区别?

为特定操作使用布局

使用 Rspec 测试 Rails 3.1 可安装引擎

Rails 模型方法 self.与普通

如何使用失败try 次数使设计可锁定

DateTime.now 还是 Time.now?

如何将字符串转换为类方法?

Rails:立即渲染并退出

导轨链接到:远程

如何测试自定义验证器?

Heroku Postgres 错误:PGError:错误:关系组织不存在(ActiveRecord::StatementInvalid)

设计:在注册期间禁用密码确认

何时使用 Helpers 而不是 Partials

Rails:一次添加多个 flash[:notice] 的简单方法

Rails,Docker:主机不存在:默认

没有UTC的Rails 3默认日期时间格式