読者です 読者をやめる 読者になる 読者になる

【Rails】【Capistrano】database.ymlの<%= ENV['XXX'] >について

はじめに

Railsでアプリを作成していて、Staging, Production環境に
Capistranoでデプロイする際にハマった点をメモ。

ただし、解決策が見つからないため週末いろいろイジってみます。

環境

前提条件

Capistranoで「rake db:migrate」が動作する手前まで
デプロイ環境ができていること。

詳細

例えば、database.ymlのProducitonを確認したところ
デフォルトでは以下のとおりとなっています。

# config/database.yml
production:
  <<: *default
  database: sample_produciton
  username: sample
  password: <%= ENV['SAMPLE_DATABASE_PASSWORD'] %>

通常「cap deploy」をする場合、最新のソースコードを取得して
そのままデプロイ作業に移ってもらいたいと考えます。
そして、ENV['XXX']ということなので、考えられる置き換えの仕方は以下のとおり。

しかし、疑問に思ったのだが
「ymlファイルに上記の設定が有効になるかどうか?」
ということです。

今回、環境変数にもたせて実行してみたのですが、以下の様なエラーが発生してしまいます。

00:31 deploy:migrate
      [deploy:migrate] Run `rake db:migrate`
00:31 deploy:migrating
      01 $HOME/.rbenv/bin/rbenv exec bundle exec rake db:migrate
      01 rake aborted!
      01 Mysql2::Error: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)

database.ymlに直接、database名とパスワードを書けば実行できるという
よくわからない状態となっています。

なお、実際に動作するディレクトリで <%= ENV['XXX'] %> を書いてあっても
ちゃんと環境変数から値を取得しているようで、問題アプリは動いています。

いろいろ、調べてみましたが有効になるような記事はたくさんあり
自分もその認識でしたが、ある環境ではうまくいかず、半日以上悩ます
案件になっています。

解決策はまだ見出していないですが、わかったらまた記事にしたいと思います。