1. ホーム
  2. ruby-on-rails

[解決済み] Expected to find a manifest file in `app/assets/config/manifest.js` (Sprockets::Railtie::ManifestNeededError)" と表示されてRailsの起動に失敗するのはなぜでしょうか。

2022-02-14 09:22:24

質問

その後 bundle update で私のRailsアプリは起動に失敗します。

Expected to find a manifest file in `app/assets/config/manifest.js` (Sprockets::Railtie::ManifestNeededError)

解決方法は?

何が起きているのですか?

スプロケットをアップグレードされたようですね。新しいバージョンのスプロケットには、"Sprockets "と呼ばれるものが必要です。 manifest.js ファイルを作成します。あなたはファイルを持っていません。ファイルを作成し、いくつかのディレクティブを追加する必要があります。

なぜ、こんなことをする必要があるのですか?

旧バージョンのsprocketsでは、どのアセットをバンドル/連結するかについて大きな仮定がなされていました。今回の変更は、正しい方向への一歩です。このような古い前提はなくなりました。設計者は、スプロケットに次のように伝えることを望んでいます。 明示的に というように、どのようなファイルをバンドルしたり連結したりしたいかを、manifest.js ファイルで指定します。

  • フォルダ内のすべてを束ねる abc 一緒に
  • フォルダにあるすべてのものを束ね、連結する xyz
  • 保つ admin.js を分離してください。

問題を解決するための簡単なステップ。

  1. manifest.jsを作成します。 ファイル

    $ mkdir -p app/assets/config 
    $ touch app/assets/config/manifest.js
     (not the root rails directory)
    
    
  2. 次に コピー&ペースト を、先ほど作成した manifest.js ファイルに追加します。

    //= link_tree ../images
    //= link_directory ../javascripts .js
    //= link_directory ../stylesheets .css
    
    

上のコメント欄のような面白いもの //= はディレクティブと呼ばれます。とスプロケは言う。

ok 今、すべての js を連結し、別々のjavascriptファイルとして保持します。

これで、いくつかの処理済みファイルができましたので、html と一緒に送信し、ユーザーが素晴らしい js/css 体験ができるようにします。そのためには javascript_include_tag このファイルは、ユーザーから要求されたときに js ファイルを渡すものです。他のファイルがある場合は、それらを忘れずに application.html.erb .

  1. もし、プリコンパイル配列が app/config/environments/projection.rb フォルダーに移動させる必要があります。 manifest.js にアクセスしていないのであれば、そのままにしておいてください。

    config.assets.precompile = ["admin.js", "admin.css"] とします。

おそらく admin.js javascript ファイルと application.js ファイルを作成します。問題ありません。sprocketsに別々にするように言ってください。

//= link_tree ../images
//= link_directory ../javascripts .js
//= link_directory ../stylesheets .css
//= link "admin.js"

  1. 最後に、webpackerを使用している場合、何をアセットパイプラインで処理し、何をwebpackerで処理したいかを決めるとよいでしょう。例えば、自分の特定のユースケースに応じて、javascriptsファイルへのlink_directoryを削除します。

参考:manifest.jsの詳細についてはこちらをご覧ください。

出典 Richard Schneemanのブログに感謝します - 詳しくはこちらをご覧ください。

EDIT 皆さん、もし混乱したり、明確でないことがあれば、コメントをして、どこが明確でないか教えてくれなければ、どうやってこの答えを修正すればいいのでしょうか?これらの改善は、誰もが恩恵を受けるので、pls発言してください。