无法从rails连接到远程mysql服务器

时间:2013-06-10 11:51:53

标签: mysql ruby-on-rails

当我跑步时:

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

我做错了什么?

2 个答案:

答案 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的访问权限