Railsチュートリアルの第7章でpumaの設定する箇所で、以下のようなENV.fetchというオブジェクトを初めて目にしたので調べてみました。
(※誤った記述がある場合、ご指摘いただければ幸いです。)
environment ENV.fetch("RAILS_ENV") { ENV['RACK_ENV'] || "production" }
違いは?
ENV['hoge'] // 'hoge'という環境変数が存在しないと、nilが返ってくる
ENV['hoge'] || 'default' // 存在しない場合のデフォルト値を設定できる
ENV.fetch('hoge', 'default') // fetchを使うと、引数でデフォルト値を設定できる
コードの意味
Pumaを実行する環境をRAILS_ENVの環境にしており、存在しない場合は、ENV['RACK_ENV']または、productionにするという設定。
environment ENV.fetch("RAILS_ENV") { ENV['RACK_ENV'] || "production" }
(HerokuではENV['RACK_ENV']にデフォルトでproductionが入っている。)
最後に
Railsチュートリアルでは、環境変数が存在しないと、productionが返ってくるようになっていたが、Herokuのドキュメントでは、developmentとなっていた。
environment ENV['RACK_ENV'] || 'development'
調べてみると、productionと書いている人や、developmentと書いている人がいたので、その時の状況によって書き方が変わる可能性があるとが分かった。
どういう状況で、書き方を変えるのか意識しながら学習していきたい。