当我跑步时:
bundle exec rails c
我得到了
Mysql2::Error: Access denied for user 'root'@'$HOST' (using password: YES)
尽管事实上这很好用:
mysql -h $HOST -P $PORT -u root -p
这是我的config / database.yml
development:
&defaults
adapter: mysql2
encoding: utf8mb4
collation: utf8mb4_unicode_ci
pool: 5
host: $HOST
port: $PORT
database: $DATABASE
username: root
password: $PASSWORD
reconnect: true
我做错了什么?
答案 0 :(得分:1)
你不能在config/database.yml
内使用bash变量。 Rails会将$HOST
视为字符串"$HOST"
,这就是您在此处看到的内容
Mysql2 ::错误:用户'root'@'$ HOST'拒绝访问(使用密码:YES)
相反,您可以使用ENV
development:
&defaults
adapter: mysql2
encoding: utf8mb4
collation: utf8mb4_unicode_ci
pool: 5
host: ENV['HOST']
port: ENV['PORT']
database: ENV['DATABASE']
username: root
password: ENV['PASSWORD']
reconnect: true
相关:http://railsapps.github.io/rails-environment-variables.html
答案 1 :(得分:0)
是否在本地主机上使用Rails应用程序?
我认为您的命令行内容转换为
mysql -h $HOST -P $PORT -u root@your-computer -p
MySQL权限基于您连接的主机,因此如果您在远程主机上运行Rails,但在localhost上执行命令行测试,则每次都会发出不同的请求。例如,root@localhost
应具有DROP
权限,但root@$REMOTE_HOST
不应具有root@your-computer
权限。我希望您的权限仅允许root@$HOST
进行连接,而不是GRANT
。
如果是这种情况,请使用{{1}}更改权限以添加对root @ $ HOST的访问权限