【Rails】【Capistrano】database.ymlの<%= ENV['XXX'] >について
はじめに
Railsでアプリを作成していて、Staging, Production環境に
Capistranoでデプロイする際にハマった点をメモ。
ただし、解決策が見つからないため週末いろいろイジってみます。
環境
- CentOS 6.5
- Ruby 2.3.0
- Ruby on Rails 4.2.7
- Capistrano 3.5.0
- WebサーバとDBサーバが1台ずつある
前提条件
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'] %> を書いてあっても
ちゃんと環境変数から値を取得しているようで、問題アプリは動いています。
いろいろ、調べてみましたが有効になるような記事はたくさんあり
自分もその認識でしたが、ある環境ではうまくいかず、半日以上悩ます
案件になっています。
解決策はまだ見出していないですが、わかったらまた記事にしたいと思います。