[解決済み] gemのアップデート後、"Asset was not declared to be precompiled in production "でテストが失敗する。
質問内容
いくつかのgemsをアップデートしてから、すべてのテストがエラーで失敗するようになりました。
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を使用しています。更新されたgemsの1つは
sprockets
(sprockets をバージョン 3.5.2 に更新しました)。私は何かで読んだ
ギズーブ
sprockets 4に問題があるとのことですが、私はバージョン4を使っていません。
追記
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になりました。簡単な修正方法は
sprockets-rails
をバージョン2.3.3に戻し、Gemfileで
bundle install
を再度実行します。
gem 'sprockets-rails', '2.3.3'
余談ですが、この問題は開発環境でも発生しており、そこで
rake assets:precompile
. 残念ながら、私のテストはパスしませんでした。
関連
-
[解決済み】なぜRuby on Railsは、http://localhost:3000 の代わりに http://0.0.0.0:3000 を使用するのですか?
-
[解決済み】警告:定数 ::Fixnum は非推奨 新しいモデルを生成するとき
-
[解決済み】gemのインストールができない - gemネイティブ拡張の構築に失敗 - そのようなファイルをロードできない -- mkmf (LoadError)
-
[解決済み] サーバーに接続できませんでした。そのようなファイルまたはディレクトリがありません (PG::ConnectionBad)
-
[解決済み] Ruby/Rails の「フック」とは何ですか?
-
[解決済み] Rails / Haml: 投稿フォームを作成するには?
-
[解決済み] Heroku: 既存のrailsアプリにseeds.rbをプッシュする方法?
-
[解決済み] レイル 4 radio_button_tag default not selected
-
[解決済み] RubyGemsのインストールやアップデートがパーミッションエラーで失敗する場合の対処法
-
[解決済み】bundlerで1つだけgemをアップデートする。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】修正方法:エラー:'<ファイル名>'にチェックアウトされたコミットがない fatal: コマンドプロンプトで "git add ." を入力するとファイルの追加に失敗する
-
[解決済み] 新規ユーザー作成時に ActiveModel::ForbiddenAttributesError が発生する。
-
[解決済み] heroku push rejected, failed to compile Ruby/rails app
-
[解決済み] Ruby on rails "No route matches" (ルートに一致するものがない)。
-
[解決済み] どなたか、collection_selectをわかりやすく説明していただけませんか?
-
[解決済み] DestroyとDeleteの違い
-
[解決済み] Railsマイグレーションを利用してカラムをドロップする方法
-
[解決済み] Railsコントローラからホスト名を取得する
-
[解決済み] 構文エラー "構文エラー、予期しない入力終了、keyword_endを期待 (SyntaxError)"
-
[解決済み] 属性とカラムの違いは何ですか?