2

我是一名新的 Rails 开发人员,我正在开发旧版 Rails 应用程序。每当我运行 rake db:create 命令时,都会收到无法创建数据库的错误消息。我发现了许多与此相关的 StackOverflow 问题,但在对几乎所有解决方案排列进行故障排除时,我无法解决该问题。

我创建了三个数据库(dev、prod、test),创建了对这些数据库具有所有访问权限的用户,然后运行rake db:create​​.

我正在运行 Mac OS X Lion、MySQL 5.5.28、Rails 2.3.5、Ruby 1.8.7。这是我的设置

development:
  adapter: mysql
  encoding: utf8
  database: adva_development
  username: adva
  password: ****
  host: localhost
  socket: /tmp/mysql.sock

这是错误:

Couldn't create database for {"adapter"=>"mysql", "username"=>"adva", "host"=>"localhost", "encoding"=>"utf8", "database"=>"adva_development", "socket"=>"/tmp/mysql.sock", "password"=>"****"}, charset: utf8, collation: utf8_unicode_ci (if you set the charset manually, make sure you have a matching collation)

我已经完成了以下故障排除:

  1. 验证用户和密码正确,用户可以访问数据库。(双重检查用户访问权限,SELECT * FROM mysql.db WHERE Db = 'adva_development' \G; 用户拥有所有权限。)

  2. 验证套接字是否正确。我不太了解套接字,但我可以在 /tmp/mysql.sock 中清楚地看到它。

  3. 检查排序规则和字符集。我发现我已经用拉丁字符集和排序规则创建了数据库,所以我重新创建了它们。我跑了show variables like "collation_database";show variables like "character_set_database";然后分别带着 utf8 和 utf8_unicode_ci 回来了。

  4. 我按照这个问题中的说明进行操作。卸载 mysql gem 后,我运行了以下命令,但遇到了同样的错误:

    gem install --no-rdoc --no-ri mysql -- --with-mysql-dir=/usr/local/mysql-5.5.28-osx10.6-x86_64/bin --with-mysql-config=/usr/local/mysql-5.5.28-osx10.6-x86_64/bin/mysql_config 
    
  5. 按照 Matt 的建议,以下是 a 所rake --trace db:create揭示的内容:

    ** Invoke db:create (first_time)
    ** Invoke db:load_config (first_time)
    ** Invoke rails_env (first_time)
    ** Execute rails_env
    ** Execute db:load_config
    ** Execute db:create
    Couldn't create database for {"database"=>"adva_development", "adapter"=>"mysql", "host"=>"127.0.0.1", "password"=>"woof2adva", "username"=>"adva", "encoding"=>"utf8"}, charset: utf8, collation: utf8_unicode_ci (if you set the charset manually, make sure you have a matching collation)
    

三天零六七个小时后,我几乎没有选择。我尝试了各种随机的东西,比如用 127.0.0.1 替换 localhost 无济于事。

我的特定环境可能有问题吗?Mac OS X Lion + MySQL 5.5.28?我计划尝试在 Linux 环境中设置所有内容。

谢谢!

4

3 回答 3

0

将 'localhost' 更改为 '127.0.0.1' (回送地址),希望它的作品

于 2013-08-02T15:33:10.373 回答
0

您可以尝试将 localhost 更改为127.0.0.1并删除socket以使用 TCP/IP 而不是本地套接字。

或者尝试验证您的数据库服务器是否使用与 Rails 相同的套接字:

mysqladmin variables | grep socket

如果这没有帮助,请尝试使用纯 Ruby 连接到数据库服务器并创建一个新数据库:

require 'rubygems'
require 'mysql'

begin
  db = Mysql.new('localhost', 'root', 'yourpassword')
  db.query('create database sample_database;');
rescue Mysql::Error => e
  puts e
ensure
  db.close unless db.nil?
end

看看这是否运行。您应该安装了 mysql gem ( gem install mysql)

于 2012-11-11T22:36:32.133 回答
0

确保您运行的是更新版本的mysql gem。我遇到了这个问题 version 2.8。升级以2.9解决问题。

于 2013-05-08T16:31:40.363 回答