development.yml
ファイルには次の開発セクションがあります。
development:
adapter: postgresql
Host: localhost
database: testtb
username: app_user
password: ENV['APP_USER_POSTGRES_PASSWORD'] <= Troublesome line
Rails bundle exec Rails console
を介してコンソールを開き、ENV['APP_USER_POSTGRES_PASSWORD']
と入力すると、ローカルプロファイルで指定したDBパスワードが返されます。 Railsサーバー、DBに接続できず、失敗します
PGError FATAL: password authentication failed for user "app_user"
これは以前、ENV['...']
を介してアクセスするのではなく、プレーンテキストでDBパスワードを実際に入力したときに機能していましたが、明らかな理由で、このファイルから実際のパスワードを完全に除外したい(したがって、 database.yml
ファイルに対する他の安全でない変更をコミットできる一方で、.
不足している構文について何か特別なものがあります、またはdatabase.yml
ファイルがロードされているときに何らかの理由で環境変数が利用できないのですか?
更新:コメントで、これはRails 4.2.x.xの時点で機能しないと報告しています。
ああ、ついに簡単な解決策を見つけました-埋め込みRubyを受け入れます:
password: <%= ENV['APP_USER_POSTGRES_PASSWORD'] %>
新しいRailsバージョンを実行している場合の短くて迅速なソリューション!次のコマンドを実行します。
spring stop
..その後、Rails console
またはその他のRailsコマンドを実行します。私の問題は、新しいENV変数を更新/ピックアップするために、Springサーバーを再起動する必要があることでした。私はRailsコンソールを起動していましたが、Springをシャットダウンするまでそれらを見ることができませんでした。
Railsの以前のバージョンでは、Springサーバーを使用していなかったため、この問題は発生しませんでした。
トラブルシューティングに役立つ別のツール-次のコマンドを使用して、database.yml設定を出力します。コマンドラインから実行できますが、Railsコンソール内で実行することをお勧めします。
Rails console
内:
puts ActiveRecord::Base.configurations
...またはawesome_printを使用
ap ActiveRecord::Base.configurations
または、代わりにコマンドラインから:
bin/Rails runner 'puts ActiveRecord::Base.configurations'