web-dev-qa-db-ja.com

gemの更新後:「運用環境でアセットがプリコンパイルされるように宣言されていませんでした」というテストが失敗する

いくつかの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。更新されたgemの1つはsprockets(バージョン3.5.2にスプロケットを更新)でした。 github で何かを読みました。スプロケット4に問題があるが、バージョン4を使用していない。


追伸Rails.application.config.assets.precompile += %w( favicons/manifest.json.erb )を_config/initializers/assets.rb_に追加しても、エラーは続きます。しかし、それがうまくいったとしても、この問題が発生した理由を理解したかったのですが、gemの更新以外の変更はありませんでした。

42
Marty

ロングアンサー+説明

エラーメッセージで推奨されているように、正しい修正はファイルをプリコンパイル済みアセットに追加することだと思います。実行時にレンダリングする必要のあるerbファイルがあるため、それで問題が解決するわけではありません。ファイルが静的なjsonファイルである場合、プリコンパイル済みアセットに追加した後でも問題は発生しません。

image_pathヘルパーを使用する場合、Sprocketsは静的なアセットを持っていると想定します。 sprockets-Rails 3.0より前にアプリでエラーが発生しなかったという事実は、驚くべきことです。この新しいバージョンは、明らかに、標準の実施においてより良い仕事をしています。 (3.0にはまもなく更新される可能性のある他の問題もあるようです)

マニフェスト内にerbが必要な場合は、image_pathまたはasset_pathではなくルートパスヘルパーを使用してURLを取得することをお勧めします。これには、マニフェストルートをconfig/routes.rbファイルに追加し、コントローラーアクションを介してjsonファイルをレンダリングする必要があります。ビューファイルは、.erbマニフェストになります。


短い答え

bundler updateバージョンを2.3.3から3.0.0に変更したsprockets-Railsを実行した後、これが私に起こり始めました。簡単な修正は、Gemfileでsprockets-Railsをバージョン2.3.3に戻し、bundle installを再度実行することです。

gem 'sprockets-Rails', '2.3.3'

余談ですが、私は開発環境でこの問題を経験していましたが、rake assets:precompileを実行することで修正できました。残念ながら、テストに合格しませんでした。

55
Nathan

同様のエラーが発生しました。 asset.rbなどは変更せず、サーバーを再起動するだけでエラーは発生しません。


ActionView :: Template :: Error(アセットは実稼働環境でプリコンパイルされるように宣言されていません。Rails.application.config.assets.precompile += %w( Rails.png )config/initializers/assets.rbに追加してサーバーを再起動します):10:<% = link_to「今すぐサインアップ!」、「#」、クラス:「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 '

6
Multivac

人々は長い答えを出しましたが、私は非常にシンプルで簡潔な答えを提案します

config/initializers/assets.rbおよび

次の行を追加します

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

style.cssは、cssの任意のファイル名に置き換えることができます

4
Yash Agrawal