Railsアプリケーションサーバを起動する時に
rails s
コマンドを使うが、このコマンドで起動されるのはdevelopment server
です。
production server
を起動するには
rails s -e production
オプションを設定する必要があります。
しかし、production server
ではcssが反映されなかったり、jsが動作しなかったりします。
これは一般的にアプリケーションを公開する場合は、cssなどの静的ファイルはNginxなどのWEBサーバが返却するのが一般的で、アプリケーションサーバの役割ではないためです。
しかし、開発の場において簡易的に公開時の動作を確認したい場合もあります。
そのときは環境変数に次の値を設定します。
export RAILS_SERVE_STATIC_FILES=1
今回は例として1
を設定しましたが、実際はどんな値でも問題ありません。
これは、config/enviroment/production.rb
を確認すれば理解できます。
# Disable serving static files from the `/public` folder by default since
# Apache or NGINX already handles this.
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
このコードでは、環境変数RAILS_SERVE_STATIC_FILES
の存在するか否かの結果が静的ファイルを配布するのかを決めています。
なので、どのような値でも格納しておけばpresent?
の部分でtrue
が返ってくるのでproduction server
でも静的ファイルを配布することが可能になります。
Dockerで環境を構築するときは、予め環境変数を設定しておくと便利です。
rails:
environment:
RAILS_SERVE_STATIC_FILES: "1"