2010-11-16 46 views
6

我想连接到远程MySQL主机(使用rake db:create),但Rails始终认为它是本地的。 database.yml中它采用以下配置:使用Rails连接远程MySQL主机的问题

defaults: &defaults 
    encoding: unicode 
    adapter: mysql 
    username: <username> 
    password: ************* 
    port: 3306 
    host: <remote ip address> 

development: 
    <<: *defaults 
    database: <db name> 
test: &test 
    <<: *defaults 
    database: <db name> 
production: 
    <<: *defaults 
    database: <db name> 

和数据库上尝试任何时候总是出现此错误:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 

的配置工作,只要我使用本地数据库(即不主机/端口部分)。 连接到远程MySQL服务器可以很好地处理给定的细节。

有什么问题出错了吗?

编辑: 的问题仅发生rake:db:create,其他任务 - 错误信息是实在太差了误导。

+0

可以粘贴完整的database.yml吗?以及你使用哪个环境?我想你可以在某处定义一个套接字配置。 – shingara 2010-11-16 14:50:10

+0

(请参阅编辑,似乎是一个奇怪的错误消息) – 2010-11-16 14:58:07

+0

检查您的防火墙/路由器设置,它似乎没有TCP连接或端口被阻止。 – 2010-11-16 15:28:32

回答

1

您可能需要启用MySQL服务器来接受远程请求(通过绑定到主机的IP地址或所有地址格式0.0.0.0)。编辑远程主机上的MySQL配置文件my.cnf。在Ubuntu中,你可以找到在文件中/etc/mysql/my.cnf

更改绑定地址的值:

bind-address   = 0.0.0.0 
+0

或只是注释掉bind-address。 – mahemoff 2012-01-20 13:44:03

+0

你必须写这个。注释掉将不起作用,因为这将考虑只接受来自当前主机的连接。 – Yeameen 2012-03-02 17:18:02

0

我发现同样的事情。我用的是这样的:

RAILS_ENV=production bundle exec rails console 

,它是抱怨不能够找到/tmp/mysql.sock(这是只有在database.yml发展部分)。如果我从控制台检查了Rails.env,它正确地表示生产。修复如下简单:

RACK_ENV=production bundle exec rails console