0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Railsのproductionモードで静的ファイルが反映されない時

Posted at

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を確認すれば理解できます。

config/enviroments/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で環境を構築するときは、予め環境変数を設定しておくと便利です。

docker-compose.yml
rails:
    environment:
      RAILS_SERVE_STATIC_FILES: "1"
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?