emolog

脳内メモです。

railsのENV[]とENV.fetch()の違い

  • ENV[]ENV.fetch()の違いがわかっていなくで少しはまった。
  • localでfailした
  • local環境でもstagingやprodutionの環境変数部分は展開しているっぽい

  • 修正前

staging:
  <<: *default
  host: <%= ENV["DB_HOSTNAME"] %>
  database: <%= ENV["DB_NAME"] %>
  username: <%= ENV["DB_USERNAME"] %>
  password: <%= ENV["DB_PASSWORD"] %>
  socket: <%= ENV["DB_SOCKET"] %>
  • 修正後
staging:
  <<: *default
  host: <%= ENV.fetch("DB_HOSTNAME") %>
  database: <%= ENV.fetch("DB_NAME") %>
  username: <%= ENV.fetch("DB_USERNAME") %>
  password: <%= ENV.fetch("DB_PASSWORD") %>
  socket: <%= ENV.fetch("DB_SOCKET") %>

docs.ruby-lang.org

key に関連づけられた値を返します。該当するキーが登録されていない時には、引数 default が与えられていればその値を、ブロックが与えられていればそのブロックを評価した値を返します。そのいずれでもなければ例外が発生します。

  • ENV["hoge"]は、"hoge"が存在しなかったらnilが返ってくる
  • ENV.fetch("hoge") { "hoge" }は、"HOGE"が存在しなかったらデフォルト値で"hoge"が返ってくる