2014-09-01 70 views
0

我有一個使用環境變量的database.yml,如:軌道控制檯將無法連接到數據庫

production: 
    adapter: mysql2 
    encoding: utf8 
    reconnect: false 
    database: <%= ENV['RAILS_DB_NAME'] %> 
    pool: 5 
    host: 127.0.0.1 
    port: 3306 
    username: <%= ENV['RAILS_DB_USER'] %> 
    password: <%= ENV['RAILS_DB_PASS'] %> 

然而,當我使用:

$ export RAILS_DB_NAME="rails_db" 
$ rails c production 
> User.all 
I get an error: 
Mysql2::Error: Access denied for user 'root'@'localhost' (using password: NO) 

我可以看到我的environement變量在同一個控制檯:

> ENV['RAILS_DB_NAME'] 
"rails_db" 

但如果我傾倒活動連接的配置是零:

> ActiveRecord::Base.connection_config 
{:adapter=>"mysql2", :encoding=>"utf8", :reconnect=>false, :database=>nil, :pool=>5, :host=>"127.0.0.1", :port=>3306, :username=>nil, :password=>nil} 

任何想法發生了什麼問題?

如何跟蹤爲什麼rails應用程序沒有獲取環境變量?

TIA!

更新:我應該澄清$ rails db完美地工作。只有$ rails c無法連接到數據庫。

更新2:當我將項目克隆到一個新文件夾和捆綁安裝時,它在那裏工作得非常好。它必須與我的文件夾。差異不顯示任何差異。奇怪的!

回答

0

我發現修復 - 但我不知道爲什麼這是一個問題..但是..軌不喜歡有一個文件夾命名爲軌道項目!

我軌項目是一個文件夾中:

/var/deployed/rails 

當我把它重命名爲:

/var/deployed/myapp 

然後$軌臺完美的作品來說話的分貝。

奇怪!

1

它沒有那麼多的Rails/ActiveRecord,但MySQL不允許連接。爲什麼您的usernamepassword未在config/database.yml中指定?

打開一個MySQL控制檯並運行此:

> grant all on rails_db.* to [email protected]; 

(有什麼是您的實際數據庫名稱替換rails_db

這將允許基於默認username=root和密碼爲空的連接。如果您確實在配置中指定了usernamepassword,則使用這些憑證重新運行授權語句。

E.g.

> grant all on rails_db.* to [email protected] identified by 'somepassword'; 
+0

對不起,我把它放在上面。它是指定的,也是環境變量。這不是根。上面的錯誤是因爲我稱爲ENV [](數據庫,用戶名,密碼)的所有三個地方都是零。數據庫配置完美工作是我運行$ rails數據庫。只有$ rails c沒有。 – peterept 2014-09-01 03:44:10