bin/rails sを実行した時に起こっていることをざっくり理解する
コマンドbin/rails s
を実行したときに起きていることをざっくり理解していきます。
-
bin/rails s
を実行
binディレクトリのrailsファイルが実行され、gemの読み込み、railsコマンドの読み込みが行われる。s(server)、db(dbconsole)、g(generate)など -
bin/rails
と一緒に渡したコマンドが実行される。s(server)が実行される -
railsサーバー(Rack)の設定を行う
サーバーのもろもろの設定を行う中でRAILS_ENVの設定も行われます。
module Rails
module Server
def set_environment
ENV["RAILS_ENV"] ||= options[:environment]
end
end
end
環境変数に"RAILS_ENV"が埋まっていればその値、埋まっていなければoption[:environment]
となるみたいですね。RAILS_ENVが埋まっていればここで終わりますが、埋まっていないと想定して||= options[:environment]
の部分をみていきましょう。
module Rails
module Command
class ServerCommand
no_commands do
def server_options
{
user_supplied_options: user_supplied_options,
server: using,
log_stdout: log_to_stdout?,
Port: port,
Host: host,
DoNotReverseLookup: true,
config: options[:config],
environment: environment,
daemonize: options[:daemon],
pid: pid,
caching: options[:dev_caching],
restart_cmd: restart_command,
early_hints: early_hints
}
end
end
end
end
end
server_optionsとなっていますが、こちらがoptionsの正体です。
environment: environment
となっています。
続いてenvironmentメソッドを見てみましょう。
Rails::Commandのクラスメソッドとしてenviromentが定義されています。
module Rails
module Command
class << self
def environment # :nodoc:
ENV["RAILS_ENV"].presence || ENV["RACK_ENV"].presence || "development"
end
end
end
end
ということで環境変数に"RAILS_ENV"があればその値、無ければ"RACK_ENV"を探し、どちらもなければ"development"となることがわかります。
環境変数に"RAILS_ENV"が埋まっている場合は先ほど見たset_environment
メソッドで処理が終わっているので、ENV["RACK_ENV"]が埋まっているかの条件がプラスされているだけになります。
環境変数にRACK_ENVを埋めるケースは見たことないし、開発環境では環境変数は何も埋めない、本番環境であれば以下のように値をセットする、というのが基本的な運用かと思います。
RAILS_ENV=production
- config/application.rbの読みこみ
この辺りからRailsのフレームワークの設定となり、開発者の目に触れる機会が多くなる部分となると思います。環境に依存しない設定は基本こちらに書きます。 - config/environments/*.rbの読み込み
環境に依存する設定をこちらに書きます。デフォルトでは(production/development/test)があります。環境はこの3つ以外にも任意に追加できます。ですが追加することはオススメしません。
理由については別途記事にしようと思います。 - いろんな初期化が行われる
4、5で様々な設定を行いましたが、その設定を元に初期化処理が行われます。
初期化のリストについてはRailsガイドを一読することをお勧めします。https://railsguides.jp/configuring.html?version=7.0#イニシャライザ - config/initializersの読み込み
initializersの配下の読み込みを行います。利用するgemに関する設定などが基本ここにあるかと思います。
このように様々な処理が行われ、Railsのサーバーの起動が実行されます。
Railsガイドもぜひ参照して確認されてください!
Discussion