私のdatabase.ymlは次のように設定されています:
development:
adapter: mysql2
encoding: utf8
database: devel
username: root
host: localhost
port: 3306
timeout: 5000
# ... snip ...
production:
adapter: mysql2
encoding: utf8
database: prod
username: <%= ENV["DB_USER"] %>
password: <%= ENV["DB_PASSWORD"] %>
host: <%= ENV["DB_HOST"] %>
port: 3306
timeout: 5000
問題は、環境変数を設定しているにもかかわらず、Rails がこれらを正しく読み取っていないことです。EC2 で Phusion を利用した Nginx サーバーを起動すると、次のメッセージが表示されます。
Access denied for user 'root'@'localhost' (using password: NO) (Mysql2::Error)
Phusion が本番環境で Rails を起動していることを確認しました。開発およびテスト構成のユーザー名とホストを一意の名前に変更すると、'root'@'localhost'
常にエラー メッセージとして表示されました。さらに、ユーザー名とパスワードを YAML ファイルにハードコーディングすると、サーバーは正しく起動します。
パスワードなしで「root」としてログインしようとしていると MySQL が主張し続けるため、環境変数を正しく設定していないと思われます。最初は .bashrc ファイルからエクスポートしていましたが、この質問を読んだ後、これは適切な方法ではないことに気付きました。いろいろ調べたところ、たまたまこのブログ投稿にたどり着いたので、指示に従って次の 3 つのファイルを作成しました。
/usr/local/etc/env
export RAILS_ENV=production
export DB_PASSWORD= (snip)
export DB_USER=doorbells
/usr/local/etc/ruby_wrapper
#!/bin/sh
source /usr/local/etc/env
exec /home/rooby/.rvm/wrappers/ruby-1.9.3-p362@doorbells-dev/ruby "$@"
/etc/profile.d/env.sh
#!/bin/sh
source /usr/local/etc/env
nginx.conf ファイルでは、次の行を使用します。
passenger_ruby /usr/local/etc/ruby_wrapper;
サーバーを再起動しましたが、役に立ちませんでした。何か案は?