Techioz Blog

Rails 7 の ActionView::Template::Error (アセット “application.css” がアセット パイプラインに存在しません。)

概要

Rails 7 で webpacker から importmaps に移行した後、解決するために何をしてもこのエラーが発生し続けます。以下はエラーの出力です。

I, [2022-12-02T11:33:16.828698 #2401]  INFO -- : [ca024b47-6054-444f-ab01-7f92d98e099f] Started GET "/" for 127.0.0.1 at 2022-12-02 11:33:16 +0500
I, [2022-12-02T11:33:16.858168 #2401]  INFO -- : [ca024b47-6054-444f-ab01-7f92d98e099f] Processing by Devise::SessionsController#new as HTML
I, [2022-12-02T11:33:17.079797 #2401]  INFO -- : [ca024b47-6054-444f-ab01-7f92d98e099f]   Rendered /Users/hamzaaamir/.rvm/gems/ruby-3.1.0/gems/devise-4.8.1/app/views/devise/sessions/new.html.erb within layouts/application (Duration: 10.1ms | Allocations: 3457)
I, [2022-12-02T11:33:17.080678 #2401]  INFO -- : [ca024b47-6054-444f-ab01-7f92d98e099f]   Rendered layout layouts/application.html.erb (Duration: 11.0ms | Allocations: 4035)
I, [2022-12-02T11:33:17.080831 #2401]  INFO -- : [ca024b47-6054-444f-ab01-7f92d98e099f] Completed 500 Internal Server Error in 223ms (ActiveRecord: 74.8ms | Allocations: 17972)
F, [2022-12-02T11:33:17.081562 #2401] FATAL -- : [ca024b47-6054-444f-ab01-7f92d98e099f]   
[ca024b47-6054-444f-ab01-7f92d98e099f] ActionView::Template::Error (The asset "application.css" is not present in the asset pipeline.
):
[ca024b47-6054-444f-ab01-7f92d98e099f]      6:     <%= csrf_meta_tags %>
[ca024b47-6054-444f-ab01-7f92d98e099f]      7:     <%= csp_meta_tag %>
[ca024b47-6054-444f-ab01-7f92d98e099f]      8: 
[ca024b47-6054-444f-ab01-7f92d98e099f]      9:     <%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
[ca024b47-6054-444f-ab01-7f92d98e099f]     10:     <%= javascript_importmap_tags %>
[ca024b47-6054-444f-ab01-7f92d98e099f]     11:   </head>
[ca024b47-6054-444f-ab01-7f92d98e099f]     12: 
[ca024b47-6054-444f-ab01-7f92d98e099f]   
[ca024b47-6054-444f-ab01-7f92d98e099f] app/views/layouts/application.html.erb:9

importmaps rake タスクを実行し、CSS ファイルをコンパイルするために sassc-rails を追加しました。開発環境では正常に動作しますが、運用環境ではエラーが発生します。また、Rails Assets:precompile も実行しました。

assets/config/manifest.jsの私のコード

//= link_tree ../images
//= link_directory ../stylesheets .css
//= link_tree ../../javascript .js
//= link_tree ../../../vendor/javascript .js

assets/stylesheets/application.scss にある私のコード

@import "bootstrap";
@import "./dashboard.scss";
@import "./sidebar.scss";

解決策

Rails 7の場合は次のコマンドを実行します

rails assets:precompile

これにより、パブリック フォルダーにアセット フォルダーが作成されます。次に、サーバーを再起動します。