環境
結論
以下、二つの方法がある。
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'
参考
- https://qiita.com/studioTeaTwo/items/486eb19c549c32ee3c88#comment-579b923a6911e5628bf1
- https://github.com/daido1976/rails-csrf-protection-api/pull/1#discussion_r420830211
Rails の API モードのコントローラで render :file するには継承元を ActionController::API から ActionController::Base に変えないといけないのか(もしくは ActionView::Rendering をインクルードするでも良い)
— Daido Shota (@daido1976) 2020年5月6日
GW 最終日にこれで2時間ハマってしまった…