web-dev-qa-db-ja.com

`database.yml`ファイル内の環境変数にアクセスできない

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ファイルがロードされているときに何らかの理由で環境変数が利用できないのですか?

64
jefflunt

更新:コメントで、これはRails 4.2.x.xの時点で機能しないと報告しています。


ああ、ついに簡単な解決策を見つけました-埋め込みRubyを受け入れます:

password: <%= ENV['APP_USER_POSTGRES_PASSWORD'] %>
164
jefflunt

新しい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'
21
FireDragon