0

当我运行时:

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

我究竟做错了什么?

4

2 回答 2

1

您不能在其中使用 bash 变量config/database.yml。Rails 将$HOST视为字符串"$HOST",这就是您在此处看到的情况

Mysql2::Error: Access denied for user '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

于 2013-06-10T12:03:07.617 回答
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

如果是这种情况,请更改权限以添加对 root@$HOST 的访问权限,使用GRANT

于 2013-06-10T12:03:17.680 回答