はじめに
Rails Tutorialを学習中に下記のエラーが発生しました。
terminal
Minitest::UnexpectedError: DRb::DRbRemoteError: Asset `application.css` was not declared to be precompiled in production.
Declare links to your assets in `app/assets/config/manifest.js`.
//= link application.css
まず開発環境でレンダリングを試しても問題なかったので、エラー文通り 本番環境で稼働する際にプリコンパイルできないし宣言されてないよ!! と怒られたみたいです。。。
開発環境
- HostOS: windows11 Home
- GestOS: ubuntu/xenial64
- ruby: 2.7.5
- Ruby on Rails: 6.1.6
なぜ発生したのか
静的アセットやCSSは、sprocketsでコンパイルしています(動的アセットはwebpacker。rails6.x以降のデフォルト設定)。
cssの拡張言語であるsass(厳密にはscss)で記述しており、cssからsassに変更した際にプリコンパイルの設定ファイル(app/assets/config/manifest.js)を変更していないのが原因でした。
app/asstes/config/manifest.js
//= link_tree ../images
// = link_directory ../stylesheets .css ←ここ
解決方法
修正方法は、とても簡単です。
cssの管理は、application.scssで行っています。
app/assets/stylesheetes/application.scss
@import 'bootstrap-sprockets';
@import 'bootstrap';
@import 'mixin';
@import 'partials/*'
ですので、先程のmanifest.jsをファルダではなくファイルを直接参照するように設定します.
app/assets/config/manifest.js
//= link_tree ../images
//= link application.css ←追加
これで先程のエラーは解消することができました‼
参考文献
Asset application.css is not declared but it is declared in manifest
Rails 7.0でアセットパイプラインはどう変わるか