2014-09-01 69 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