👻

ActionController::RoutingError (No route matches [GET] "/manifest.json

2025/01/29に公開

このエラー ActionController::RoutingError (No route matches [GET] "/manifest.json") は、Rails アプリケーションが manifest.json というリクエストに対するルートを持っていないために発生しています。

解決策

1. manifest.json を明示的に用意する

manifest.json は、PWA(Progressive Web App)やWebアプリのメタ情報を定義するためのファイルで、通常 public/manifest.json に配置されます。

手順

  1. public/manifest.json を作成する
    touch public/manifest.json
    
  2. ファイルを編集して、以下のような内容を記述:
    {
      "name": "MyApp",
      "short_name": "MyApp",
      "start_url": "/",
      "display": "standalone",
      "background_color": "#ffffff",
      "theme_color": "#000000"
    }
    
  3. Railsを再起動
    rails restart
    

これで、Railsは /manifest.jsonpublic ディレクトリから提供できるようになります。


2. routes.rb に明示的なルートを追加する

もし public/manifest.json を置かずに manifest.json を動的に提供したい場合、routes.rb にルートを追加します。

手順

  1. config/routes.rb を編集:
    get "/manifest.json", to: proc { [200, { "Content-Type" => "application/json" }, [File.read(Rails.root.join("app/assets/config/manifest.json"))]] }
    
  2. manifest.jsonapp/assets/config/manifest.json に作成:
    {
      "name": "MyApp",
      "short_name": "MyApp",
      "start_url": "/",
      "display": "standalone",
      "background_color": "#ffffff",
      "theme_color": "#000000"
    }
    
  3. サーバーを再起動
    rails restart
    

3. sprockets-rails をインストール

エラーの原因として、sprockets-rails がインストールされていない可能性もあります。

手順

bundle add sprockets-rails
bundle install

その後、rails restart して動作を確認してください。


結論

  • public/manifest.json を作成するのが最も簡単な解決策。
  • ルートを定義して app/assets/config/manifest.json を動的に提供することも可能。
  • sprockets-rails が不足している場合はインストール。

まずは public/manifest.json を作成する方法から試してみてください!

Discussion