【问题标题】:ActiveRecord::StatementInvalid: Mysql2::Error: Can't create database 'sharetribe_development' (errno: 2)ActiveRecord::StatementInvalid: Mysql2::Error: Can't create database 'sharetribe_development' (errno: 2)
【发布时间】:2015-12-26 20:03:39
【问题描述】:

您好,我正在 MAC OS X Yosemite 中设置一个 rails 3.2.21 项目。运行命令rake db:create 时出现以下错误

rake 中止! ActiveRecord::StatementInvalid: Mysql2::Error: Can't create database 'sharetribe_development' (errno: 2): CREATE DATABASE sharetribe_development DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci

我不知道为什么会出现这个错误。我可以使用mysql -u root 访问 mysql 这是我的 database.yml

development:
    adapter: mysql2
    database: sharetribe_development
    encoding: utf8
    username: root
    password:
    host: localhost

我整天都被这件事困住了。任何建议都将不胜感激

编辑 1

在mysql中,我关注数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.00 sec)

编辑 2

我在 gem 文件中添加了 gem 'mysql2', '~> 0.3.20'。我使用的是 rails 3.2.21。我遇到了另一个问题。我重新安装了mysql。安装后,我可以使用mysql -u root成功访问mysql,但是在执行命令rake db:create之后会抛出以下错误。

拒绝用户 'root'@'localhost' 的访问(使用密码:YES)。 请提供你的mysql安装的root密码

在此之后尝试访问 mysql 我无法访问它。它说 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

我没有为mysql设置任何密码。但是我无法访问它。

【问题讨论】:

  • 请添加Gemfile.lock的sn-p,显示mysql、activerecord、rails等的gem版本
  • @illusionist 请看我的最新更新
  • 看起来你已经为你的数据库设置了密码但是你的应用试图在没有密码的情况下访问..
  • 不,我没有任何密码。在运行 rake db:create 之前我可以访问 mysql 但在此之后它会抛出上述错误
  • 我记得几天前我也遇到过同样的问题。问题与activerecord和mysql2之间的gem版本冲突有关; activerecord 版本因Rails 的版本而异。我认为您应该关注version compatibility 以解决您报告的前一个问题

标签: mysql ruby-on-rails activerecord


【解决方案1】:

您使用的是 mysql2 gem 上的哪个版本?

latest version 存在问题,您可能希望回退到 0.3.20,看看这是否有什么不同。

为此,请将以下内容添加到您的 Gemfile 中

gem 'mysql2', '~> 0.3.20'

删除当前 gemfile.lock 并从命令行运行bundle install。

【讨论】:

  • 我有以下版本的 mysql gem 1. mysql2-0.3.14 2. mysql2-0.3.16 3. mysql2-0.3.18
【解决方案2】:

将 gem 'mysql2' 添加到您的 Gemfile 中。

【讨论】:

  • 你试过 gem 'mysql2', '~> 0.3.13' 吗?
  • @BibekSharma:mysql2-0.4 版本不适用于当前的 ActivereRecord,因为 mysql2 不使用语义版本控制,因此它对所有人都崩溃了。
  • 试试 $sudo ./mysql.server stop $sudo ./mysql.server start --skip-grant-tables $ mysql mysql> 使用mysql; mysql> 更新用户 SET 密码=PASSWORD('YOUR_NEW_PASSWORD_HERE') WHERE user = 'root'; mysql>退出; $sudo ./mysql.server stop $sudo ./mysql.server start 然后在config/database.yml中输入密码
猜你喜欢
  • 2013-05-29
  • 2018-03-15
  • 2016-09-13
  • 1970-01-01
  • 2022-11-26
  • 2018-08-05
  • 2014-07-10
  • 1970-01-01
  • 2021-12-09
相关资源
最近更新 更多