问题描述: 在本机设置环境变量 PASSWORD=root,在 database.yml 中书写如下:
default: &default
adapter: mysql2
encoding: utf8
pool: 5
username: root
password: ['PASSWORD']
socket: /tmp/mysql.sock
rails db:create 报错如下:
Mysql2::Error: Access denied for user 'root'@'localhost' (using password: NO)
我使用的版本是 rails5.0.0.1, 本机是 OS X,数据库是 mysql5.7。其中环境变量的设置方式:刚开始的时候是在.bash_profile 中设置 export PASSWORD=root,但是发现在终端中输入 env 没有出现 PASSWORD 的值,参考了装了 ohmyzsh,为啥.bash_profile 就不执行了...那改环境变量应该去哪呢?,因为安装了 zsh,并且是直接 zsh 启动,因此在按照该链接的方式,在.bash_profile 中设置 export PASSWORD=root,同时在.zshrc 中执行 source .bash_profile 语句,终端中输入 env,显示出来 PASSWORD=root,但是 database 文件没有读取出 ['PASSWORD'] 的值,为何?
另外: 1、排除的数据库出错的可能性,我的数据库密码是 root, 在 database.yml 文件中进行硬编码,password: root,rails db:create 是成功的。 2、['PASSWORD'] 的值在 rails 中也能够读取成功,可以通过在 controller 中将 ['PASSWORD'] 赋值给实例变量,并且将其呈现在 view 中。 3、尝试了 dotenv,出现上面同样的问题。
解决:
password: ['PASSWORD'] #错误写法
password: <%= ENV["PASSWORD"] %> #正确写法
不知为何自己一直执着于错误写法。