【问题标题】:Ruby on Rails having a rough time connecting to MySQLRuby on Rails 连接 MySQL 时遇到困难
【发布时间】:2011-05-09 00:34:40
【问题描述】:

我很难让 Ruby 连接到 mySQL。我可以使用 mySQL 工作台连接 MYSQL,这很好。 这是我尝试运行 DBConsole 时遇到的错误。

W:\testMySQL>rails dbconsole
Enter password: ********
ERROR 1045 (28000): Access denied for user 'coffeetowndev'@'localhost' (using pa
ssword: YES)

我在 GoDaddy 帐户上的数据库上运行,因此我无法向该用户授予所有权限。我打电话给godaddy,他们发誓他们的“RoR”部门能够使用我的设置进行连接。 说到这里,这里是database.yml文件。

development:
 adapter: mysql
 encoding: utf8
 reconnect: false
 port: 3306
 database: coffeetowndev
 pool: 5
 username: coffeetowndev
 password: ********
 hostname: coffeetowndev.db.5850247.hostedresource.com

在相关/不相关的注释中,我无法安装 mySQL2 gem,所以我使用的是 mySQL。

编辑:整个 database.yml 文件

development:
 adapter: mysql
 encoding: utf8
 reconnect: false
 port: 3306
 database: coffeetowndev
 pool: 5
 username: coffeetowndev
 password: ********
 hostname: coffeetowndev.db.5850247.hostedresource.com

test:
 adapter: mysql
 encoding: utf8
 reconnect: false
 port: 3306
 database: coffeetowntest
 pool: 5
 username: coffeetowntest
 password: ********
 hostname: coffeetowntest.db.5850247.hostedresource.com


production:
 adapter: mysql
 encoding: utf8
 reconnect: false
 port: 3306
 database: coffeetown
 pool: 5
 username: coffeetown
 password: ********
 hostname: coffeetown.db.5850247.hostedresource.com

【问题讨论】:

  • 还有你想看的信息吗?和文件?错误页面?非错误页面?另外,我的求助电话似乎被删掉了。这更像是一个要求很高的帮助吗?

标签: mysql ruby-on-rails mysql-error-1045


【解决方案1】:

您在部署到 godaddy 时使用的是生产设置,而不是开发设置?我没有使用 godaddy 托管 Rails 应用程序的经验,但他们可能会将所有托管应用程序配置为默认为生产环境(许多 Rails 主机都这样做)。因此,如果它使用不同的环境,它可能没有使用您期望的用户名/密码组合。

您可能还想尝试通过编写一个快速而肮脏的 PHP 测试脚本来测试您的凭据,如下所示:

$con = mysql_connect("coffeetowndev.db.5850247.hostedresource.com","coffeetowndev","******");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
echo 'Connected successfully';

mysql_close($con);

另外,上面说它失败了,但它正在尝试使用用户'coffeetowndev'@'localhost'。您必须确保使用以下方式向该用户授予权限:

grant select,insert,update,delete on coffeetowndev.* to 'coffeetowndev'@'localhost' identified by ********

【讨论】:

  • 哦,我没有将 godaddy 用于 rails ap,仅用于 MySQL DB。我打算把它推到heroku,但把数据库放在哪里?还是这是一个可怕的想法?
  • 啊。那么有些不对劲。它正在尝试使用本地数据库。无论您在哪里运行 rails 应用程序,它都会尝试连接到本地数据库,而不是尝试从远程主机连接到 coffeetowndev.db.5850247.hostedresource.com。否则,mysql 的错误消息将是:ERROR 1045 (28000): Access denied for user 'coffeetowndev'@'123.123.123.1' (using pa ssword: YES),其中 123.123.123.1 是运行 rails 应用程序的远程主机。
  • 但是当我输入密码时它知道用户是'coffeetowndev',如果我输入没有密码,我得到这个错误:错误1044(42000):用户''@的访问被拒绝'localhost' 到数据库 'coffeetowndev' 所以,它访问了正确的数据库,因为 localhost 数据库中没有任何信息。
  • 作为一个坏主意,我偏执的一面说是的。但是,许多主机默认情况下让 mysql 对 Internet 开放(从端口的角度来看)。然后,您需要绝对确保您已尽可能严格地锁定用户权限。您可能必须在主机段中使用 % 作为通配符,因为使用 Heroku 托管时远程 IP 可能会发生变化。所以,你需要这样的东西:grant ... on ... to 'coffeetowndev'@'%'。不过,我的直觉反应是让 Heroku 托管您的数据库,而不是尝试使用 Godaddy 托管它。
  • 尝试在您的 database.yml 文件中将 hostname: 替换为 host:。您可以粘贴整个 database.yml 文件吗?你用的是什么版本的rails?
【解决方案2】:

您的 SQL 服务器上是否安装了 PHPMyAdmin?通常,每当我创建一个新用户时,我都会通过 PHPMyAdmin 并在我正在使用的 RoR 的数据库上设置具有授予访问权限的用户。您的 database.yml 看起来不错,问题出在 SQL 方面。

【讨论】:

  • 可以,但我无法在 mySQL.users 表上进行选择。我什至没有权限这样做。我试图为用户 'coffeetowndev' 授予所有权限,但该错误已出。
  • 您在尝试授予授权时以什么用户身份登录?
  • 咖啡城开发。我没有 Godaddy 的 root 用户权限。呸。 (当然那是行不通的。我现在明白了)
  • 您实际上不需要root,您只需要在您的帐户中指定with grant option。我希望您可以从他们的控制面板进行配置,或者至少配置其他用户。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-30
相关资源
最近更新 更多