19
6

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 1 year has passed since last update.

なぜconfig.public_file_server.enabledは環境変数RAILS_SERVE_STATIC_FILESを参照するのか?

Posted at

https://qiita.com/search?q=RAILS_SERVE_STATIC_FILES を見てみて下さい。環境変数RAILS_SERVE_STATIC_FILESを設定し忘れて、静的ファイルが取得出来ない事例がたくさん見みつかります。

多くの人がつまづくにも関わらず、なぜconfig.public_file_server.enabledは環境変数RAILS_SERVE_STATIC_FILESを参照するのでしょうか?

config/environments/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?

ソースコードのコメントを見ると、静的ファイルはApacheやNGINXで扱うはずと書かれています。導入されたころのプルリクエストを漁ってみると次の記述を見つけました。

Speed up static file service by caching existence checks by schneems · Pull Request #16464 · rails/rails

Currently the ActionDispatch::Static middleware hits disk on every GET and HEAD request to check if the given request maps to a file on disk.

When benchmarked with the entire Rails stack we still see an increase but it is roughly ~2.6% speed increase:

Railsの静的ファイル配信機能をOFFすると2%くらいの性能向上があったようです。ただし、9年前の情報です。Rails 4.2の頃の情報です。今でも同じ効果があるとは限りません。少なくとも導入当初は性能上のメリットがあったようです。

どうやら、Railsをデプロイする標準的なサーバー構成としては、Railsサーバーの手前にApacheやNGINXをリバースプロキシとして配置すると考えられているようです。そのため、デフォルトではRailsの静的ファイル配信機能は無効化されているようです。開発環境での動作確認など限られた状況で手軽に有効に出来るように、環境変数を参照しているようです。

ところで4ヶ月前にマージされた興味深いプルリクエストがあります。
Turn on static file server by default by dhh · Pull Request #47137 · rails/rails
どうやらRails 7.1では、静的ファイル配信機能がデフォルトで有効になるようです。

Modern deployments don't need NGINX/Apache when using CDNs or caching LBs in front.

今時は「ApacheやNGINXは使わないで、RailsサーバーとCDNだけで構成する」のだそうです。

参考

19
6
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
19
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?