无法运行rake db:create:all -- 无法为{"encoding"=>"utf8", "username"=>"root", "adapter"=>"mysql"}创建数据库。

7
我正在尝试在我的计算机上运行一个Rails应用程序,但创建数据库时出现了问题。我已经正确安装/设置了Rails、MySQL,并安装了mysql 2.8.1 gem(我通过gem list验证过)。
所以现在,我正在尝试运行'rake db:create:all',但是我收到了以下错误信息:
“无法为{"encoding"=>"utf8", "username"=>"root", "adapter"=>"mysql", "database"=>"pyo", "host"=>"localhost", "password"=>nil, "socket"=>"/tmp/mysql.sock"}创建数据库,字符集:utf8,排序规则:utf8_unicode_ci(如果您手动设置字符集,请确保有匹配的排序规则)”;
“无法为{"encoding"=>"utf8", "username"=>"root", "adapter"=>"mysql", "database"=>"pyo_test", "host"=>"localhost", "password"=>nil, "socket"=>"/tmp/mysql.sock"}创建数据库,字符集:utf8,排序规则:utf8_unicode_ci(如果您手动设置字符集,请确保有匹配的排序规则)”。
我当前正在Snow Leopard(10.6.6)上运行5.5.10 MySQL Community Server(GPL)。
这是我的database.yml文件中的内容:
development:
  adapter: mysql
  encoding: utf8
  database: pyo
  username: root
  password:
  socket: /tmp/mysql.sock
  host: localhost

test:
  adapter: mysql
  encoding: utf8
  database: pyo_test
  username: root
  password:
  socket: /tmp/mysql.sock
  host: localhost

我注意到错误信息末尾写着 "charset: utf8, collation: utf8_unicode_ci (如果您手动设置字符集,请确保匹配的排序规则)" -- 这是问题所在吗?如果是,怎样修复呢?

我已经卡在这个问题上好几个小时了,在谷歌上也找不到有用的帮助。所以,现在任何帮助都将不胜感激。

谢谢!


你找到那个问题的解决方案了吗?有一个有意义的解释吗? - Islam Azab
5个回答

5
我知道这个帖子有点旧,但作为一个追求在一个地方保持好的、坚实的文档记录的IT人员,我来这里给出解决方法:
问题实际上源于你的 "config/database.yml" 文件。你指向了ROR错误的MySQL Socket位置。
我也遇到过这个问题,原因是gem在mac系统上构建,开发者没有考虑到其他操作系统,把他的 "mysql.sock" 文件放在了 "/tmp" 目录而不是 "/var/run/mysqld/mysqld.sock"。
所以他的 "database.yml" 文件看起来像:
development: adapter: mysql2 #encoding: utf8 database: somedatabase pool: 5 username: someusername password: somepassword socket: /tmp/mysql.sock
由于我在Ubuntu系统上,所以我的更改如下:
development: adapter: mysql2 #encoding: utf8 database: somedatabase pool: 5 username: someusername password: somepassword socket: /var/run/mysqld/mysqld.sock
是的,这个错误可能会引导你走错路线,但它与你是否使用 localhost 或 127.0.0.1 或 '编码' 没有任何关系(至少在 Linux/UNIX 系统中,这些意思相同)。
编辑开始
另外一点需要注意的是,在上面的示例代码中,把 encoding 注释掉并不好。所以,我在这里提供了修改的代码,以供参考。
development: adapter: mysql2 encoding: utf8 database: somedatabase pool: 5 username: someusername password: somepassword socket: /var/run/mysqld/mysqld.sock
编辑结束

在我的情况下,如果你从Ubuntu切换到Mac。不用说,这里有一个快速解决方案`socket: /tmp/mysql.sock` - Ndeto

2

我曾经遇到了使用mysql2 gem时出现的同样问题。然后我发现我的MySQL只监听'localhost'而不是'127.0.0.1',所以我将其更改为'localhost',现在我不再遇到这个问题了。现在一切都正常运行。


2

我认为我有类似这样的问题...通过将以下内容添加到database.yml中解决了问题:

host: 127.0.0.1

在你的情况下,将其从本地主机修改。


今天遇到一个类似的错误消息,这个方法对我有用,谢谢。 - Bryan

0

我想分享我的解决方案。 我的database.yml文件如下:

default: &default
  adapter: mysql2
  encoding: utf8
  username: root
  password: 
  host: 127.0.0.1
  port: 3306

development:
  <<: *default
  database: dev.database

我的错误出在这一行

database: dev.database

所以,我不带点 (.) 写作。

database: devdatabase

0

所以,经过大约3到4天的谷歌搜索和尝试许多不同的东西后,我不知怎么偶然发现了这个:

http://geryit.com/blog/2011/01/installing-mysql-with-rails-on-mac-os-x-snow-leopard/

你猜怎么着?它奏效了!完美地。这让我相信问题出在MySQL 5.5.10上。它的某些特性与我的ruby/rails环境不兼容。然而,一旦我按照上面链接中的说明操作(包括卸载mysql并重新安装5.1版本),我的应用程序现在在本地机器上运行得非常完美。

希望这能帮助到某个人!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接