我想连接到远程MySQL主机(rake db:create
),但Rails总是认为它是本地的。
Database.yml使用以下配置:
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 :(得分:1)
您可能需要启用MySQL服务器来接受远程请求(通过绑定到主机的IP地址或所有地址格式0.0.0.0
)。编辑远程主机上的MySQL配置文件my.cnf
。在Ubuntu中,您可以在/etc/mysql/my.cnf
更改bind-address的值:
bind-address = 0.0.0.0
答案 1 :(得分:0)
我发现了同样的事情。我正在使用它:
RAILS_ENV=production bundle exec rails console
它抱怨无法找到/tmp/mysql.sock
(仅在database.yml
的开发部分)。如果我从控制台检查Rails.env
它正确地说生产。修复很简单:
RACK_ENV=production bundle exec rails console