【问题标题】:Problems connecting to remote MySQL host with Rails使用 Rails 连接到远程 MySQL 主机的问题
【发布时间】:2010-11-16 14:37:14
【问题描述】:

我想连接到远程 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 上,其他任务有效 - 错误消息非常具有误导性。

【问题讨论】:

  • 你能粘贴完整的 database.yml 吗?你使用哪个环境?我想你在某处定义了一个套接字配置。
  • (见编辑,似乎是一个奇怪的错误错误信息)
  • 检查您的防火墙/路由器设置,您似乎根本没有 TCP 连接或端口被阻止。
  • 已解决 - 只是创建 rake 任务不起作用。其他一切都在工作。不知道为什么 rails 认为 create 是本地的。
  • 创建任务是否使用与其他用户不同的用户连接?如果是这样,请检查 mysql 表,可能需要更改主机列,SELECT CURRENT_USER(); 也可能会有所帮助,默认情况下 mysql 假设通过套接字连接,您需要在远程访问中明确告知使用端口

标签: mysql ruby-on-rails database


【解决方案1】:

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

更改绑定地址的值:

bind-address            = 0.0.0.0

【讨论】:

  • 或者只是注释掉绑定地址。
  • 你必须写这个。注释掉是行不通的,因为这将考虑只接受来自当前主机的连接。
【解决方案2】:

我发现了同样的事情。我正在使用这个:

RAILS_ENV=production bundle exec rails console

它抱怨找不到/tmp/mysql.sock(仅在database.yml的开发部分)。如果我从控制台检查Rails.env,它正确地说是生产。修复很简单:

RACK_ENV=production bundle exec rails console

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-14
    • 2015-11-09
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多