我使用以下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"}
正如您所看到的,凭据都是零,因此,为了修复控制台中的访问权限,我只是将条目:username
和password
更改为正确的值,但当然,不适用于 rspec 单元测试。
我的猜测是rails没有设置ActiveRecord::Base.connection_config
,但我不知道如何检查此分配,或者我所做的任何更改都可能修改此行为。