web-dev-qa-db-ja.com

Rails database.ymlファイルの環境変数を設定するには?

私のローカルマシンで、database.ymlファイルのすべての機密情報に環境変数を設定します。私のファイルは次のようになります:

default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: <%= ENV['DATABASE_USERNAME'] %> 
  password: <%= ENV['DATABASE_PASSWORD'] %>
  socket: <%= ENV['SOCKET'] %>

development:
  <<: *default
  database: <%= ENV['DEVELOPMENT_DATABASE'] %>

test:
  <<: *default
  database: #JetStreamIQ-2_0_test

production:
  <<: *default
  database: <%= ENV['PRODUCTION_DATABASE'] %>
  username: <%= ENV['DATABASE_USERNAME'] %> 
  password: <%= ENV['DATABASE_PASSWORD'] %>

これらの環境変数を.bashrcファイルに設定するだけでよいと思っていましたが、機能していないようです。私の.bashrcファイルは次のようになります。

export DATABASE_USERNAME="root"
export DATABASE_PASSWORD="*****"
export SOCKET="/var/run/mysqld/mysqld.sock"
export DEVELOPMENT_DATABASE="shoppe_development"
export PRODUCTION_DATABASE="#"

サーバーを実行すると

Rails s

私は言うエラーが出ます:

Access denied for user 'root'@'localhost' (using password: YES)

Database.ymlファイルの構成方法が原因で、データベースのユーザー名とパスワードに問題があることを理解していますが、それが何かはわかりません。

ここで見逃している大きなものはありますか?どんな助けでも大歓迎です。

ありがとう!

17
Mark

ここでいくつかのヒントを提供したいと思います。

  1. Erbを介してdatabase.ymlを実行し、何を取得しているかをテストできます。たとえば、erb config/database.ymlです。これは、問題が何であるかを判断するのに役立ちます。

  2. setコマンドを使用して、シェルに設定されているすべての環境変数を見つけることができます。これにより、予期している環境変数が設定されていることを確認できます(.bashrc内)。

これがお役に立てば幸いです。

30

Bashrcファイルを編集した後、変更を確定するために、そのターミナルセッションを終了して別のターミナルを開く必要があったことがわかります。

4
Mark

端末を再起動したくない場合は、.bashrcファイルを実行するだけです。

source /path/to/.bashrc

Railsサーバーと同じターミナルで.

2
dechimp

それはタイプミスですか、それともJETSTREAMIQ_DATABASE_PASSWORDですが、次にDATABASE_PASSWORDあなたのdatabase.yml?それでそれができるからです。

mysqlコマンドラインアプリを使用して実際の値を直接使用してmysqlに接続できますか?

1

環境変数を.bashrcファイルの先頭に配置する必要がある場合があります。ファイルへのリターンが実行されるためです。したがって、実際にexportコマンドを実行する前に戻ります

このようなもの:

ナノ〜/ .bashrc

export DATABASE_VAR="my_own_var"

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac
1
Shimaa Marzouk