1
Help us understand the problem. What are the problem?

posted at

ENVとENV.fetchの違いを調べてみた

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と書いている人がいたので、その時の状況によって書き方が変わる可能性があるとが分かった。
どういう状況で、書き方を変えるのか意識しながら学習していきたい。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?