Note

3年後の自分のために書いています

Rails の API モードで静的ファイルをホスティングする

環境

結論

以下、二つの方法がある。

config.public_file_server.enabled を true にして public ディレクトリ以下に置く

静的な HTML ファイルを表示させたいだけなら config.public_file_server.enabled を true に設定した環境で public/index.html を作成すれば、ルーティングやコントローラを実装せずとも表示される。(config.public_file_server.enabled は development 環境などでは デフォルトで true

コントローラで render :file する

以下のどちらかをしないと API モードでは render :file できない。

  • コントローラの継承元を ActionController::API から ActionController::Base に変更する
  • ActionView::Rendering モジュールをインクルードする

説明

Rails ガイドより、

ref. https://railsguides.jp/asset_pipeline.html#アセットパイプラインの使用方法

アセットは引き続きpublicディレクトリ以下に置くことも可能です。config.public_file_server.enabledがtrueに設定されていると、publicディレクトリ以下に置かれているあらゆるアセットはアプリケーションまたはWebサーバーによって静的なファイルとして取り扱われます。

とある通り、config.public_file_server.enabled が true になっている場合は public ディレクトリに置かれているファイルは自動的にホストされる。

development 環境の config.public_file_server.enabled は以下のコマンドなどで確認できる。

$ rails r -e development 'p Rails.application.config.public_file_server.enabled'

参考