mysql - rake db :create not working for legacy rails app (2. 3.5) 使用 MySQL (5.5.28)

标签 mysql ruby-on-rails ruby

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

我创建了三个数据库(开发、生产、测试​​),创建了对这些数据库具有所有访问权限的用户,然后运行了 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 "collat​​ion_database";show variables like "character_set_database"; 并分别返回了 utf8 和 utf8_unicode_ci。

  4. 我按照 this question 中的说明进行操作.卸载 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 的建议,下面是 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)
    

3 天零六七个小时后,我几乎没有选择了。我尝试了各种随机操作,例如用 127.0.0.1 替换 localhost 都无济于事。

会不会是我的具体环境出了问题? Mac OS X Lion + MySQL 5.5.28?我计划尝试在 Linux 环境中设置所有内容。

谢谢!

最佳答案

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

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

mysqladmin 变量 | grep 套接字

如果这没有帮助,则尝试使用纯 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)

关于mysql - rake db :create not working for legacy rails app (2. 3.5) 使用 MySQL (5.5.28),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13335871/

相关文章:

ruby-on-rails - Rails + Heroku + Cloudflare - 消除 www 作为子域

python - MySQL : IndexError: tuple index out of range

php - 从MySQL两张表中获取数据并排序

mysql - 从我的数据库中检索数据时出现奇怪的问题

ruby-on-rails - Carrierwave裁剪特定版本

mysql - 如何通过 id 查找记录并选择几列,ruby on rails?

ruby - 如何从私有(private)远程 ip 获取文件名列表

ruby-on-rails - 如何检查预订日期是否与 Rails Hotel 应用程序重叠

ruby - 带有字符串键的哈希的安全导航运算符

mysql - 如何提高拥有 5000 万条记录且不断增长的表的性能