だいぶ古い環境だけど。
- Rails 5.1.7
- dotenv 2.2.1
Variable Substitution
dotenv には Variable Substitution という仕組みがあって ${VAR}
$VAR
のようにして変数に変数を突っ込める。
で、以下のような記述をしていた。この状態で deliver_now
など SMTP 認証してメール送信、としようとするとエラーとなる。
config/environments/production.rb
config.action_mailer.smtp_settings = { :address => "smtp.example.com", :port => 587, :domain => ENV['SMTP_DOMAIN'], :authentication => :login, :user_name => ENV['SMTP_USER_NAME'], :password => ENV['SMTP_PASSWORD'] }
.env
# smtp SMTP_DOMAIN="example.com" SMTP_USER_NAME="user@example.com" SMTP_PASSWORD="pas$word"
$
は変数として認識される
これ単純に気付いてなかったんだけど、以下のように記載がある。
If a value contains a $ and it is not intended to be a variable, wrap it in single quotes.
意訳: 値に $ が入っていて変数じゃない時は、シングルクォートで囲ってね
なるほどな、ということであった。 上記だと pas
と変数 $word
の組み合わせになってしまっているんですネー。
README はよく読もう! と言われてなるべく読んではいるんだけど、まあ忘れるよねってヤツであった。 今回は、変更後のパスワードに $
は含めないようにしていたので、結局 .env
だけ書き換えて終了した。 SMTP_PASSWORD='pas$word'
にすりゃいいんだろうか、試すのわすれちまったヨ。