访问被拒绝mysql rails 4

时间:2014-11-19 17:40:41

标签: mysql ruby-on-rails ruby rspec

我使用以下database.yml:

在rails 4应用程序中设置了一个mysql数据库
default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  host: localhost
  username: <%= ENV['MYSQL_USER'] %> 
  password: <%= ENV['MYSQL_PASSWORD'] %>
  socket: /var/run/mysqld/mysqld.sock

development:
  <<: *default
  database: database_development
test:
  <<: *default
  database: database_development

一开始它工作正常,我没有任何数据库问题。我创建了一些连接表和一些has_many :through关联,它开始抛出以下错误:

Access denied for user 'root'@'localhost' (using password: NO) (Mysql2::Error)

因此,该错误中存在一些不一致,这使我认为rails没有很好地加载database.yml文件:

  • 首先,如果我进行任何迁移或启动服务器,rails不会抱怨并且工作正常。当我尝试从控制台访问模型或运行 rspec 单元测试时,会出现错误。

  • 其次,我在环境变量MYSQL_USER中设置的用户不是root

  • 第三,当我在控制台中运行ENV['MYSQL_USER']ENV['MYSQL_PASSWORD']时,它们会显示正确的值(我在环境变量中设置的值)。

据我所知,对于mysql,rails使用ActiveRecord::Base.connection_config变量来设置凭据以及其他一些能够访问数据库的信息,所以我打印出来了:

=> {:adapter=>"mysql2", :encoding=>"utf8", :pool=>5, :host=>"localhost", :username=>nil, :password=>nil, :socket=>"/var/run/mysqld/mysqld.sock", :database=>"database_development"}

正如您所看到的,凭据都是零,因此,为了修复控制台中的访问权限,我只是将条目:usernamepassword更改为正确的值,但当然,不适用于 rspec 单元测试。

我的猜测是rails没有设置ActiveRecord::Base.connection_config,但我不知道如何检查此分配,或者我所做的任何更改都可能修改此行为。

0 个答案:

没有答案