Mysql rakedb:仅创建开发数据库

Mysql rakedb:仅创建开发数据库,mysql,ruby-on-rails,rake,mysql2,Mysql,Ruby On Rails,Rake,Mysql2,我正在启动一个新的rails 3应用程序,当我运行rake db:create时,它会询问我的根mysql密码,然后错误地说: Mysql2::错误:用户“arcsite\u mysql”@“localhost”对数据库“arcsite\u mysql\u test”的访问被拒绝:创建数据库arcsite\u mysql\u test默认字符集utf8COLLATEutf8\u unicode\u ci 如果我在命令行上登录mysql并运行show databases我看到这个: arcsite

我正在启动一个新的rails 3应用程序,当我运行
rake db:create
时,它会询问我的根mysql密码,然后错误地说:

Mysql2::错误:用户“arcsite\u mysql”@“localhost”对数据库“arcsite\u mysql\u test”的访问被拒绝:创建数据库
arcsite\u mysql\u test
默认字符集
utf8
COLLATE
utf8\u unicode\u ci

如果我在命令行上登录mysql并运行
show databases我看到这个:

arcsite_mysql_development
GRANT ALL PRIVILEGES ON `arcsite_mysql_development`.* TO 'arcsite_mysql'@'localhost' WITH GRANT OPTION 
如果我运行
SHOW GRANTS FOR arcsite_mysql@localhost
我看到了这一点:

arcsite_mysql_development
GRANT ALL PRIVILEGES ON `arcsite_mysql_development`.* TO 'arcsite_mysql'@'localhost' WITH GRANT OPTION 
My database.yml:

# MySQL.  Versions 4.1 and 5.0 are recommended.
#
# Install the MYSQL driver
#   gem install mysql2
#
# Ensure the MySQL gem is defined in your Gemfile
#   gem 'mysql2'
#
# And be sure to use new-style password hashing:
#   http://dev.mysql.com/doc/refman/5.0/en/old-client.html
development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: arcsite_mysql_development
  pool: 5
  username: arcsite_mysql
  password: password
  host: localhost

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: arcsite_mysql_test
  pool: 5
  username: arcsite_mysql
  password: password
  host: localhost
因此,出于某种原因,只创建了开发数据库

版本:

轨道3.2.13

MySQL:服务器版本:5.6.10源代码分发

mysql2:mysql2-0.3.11

编辑

如果我手动将所有权限授予
arcsite\u mysql
用户,我可以创建表。但是Rails是否会为开发而不是测试环境创建用户和表呢?当我第一次运行
rake db:create
命令时,
arcsite\u mysql
用户是由rails创建的

编辑2

第4点:


提到了一些涉及mysql用户创建的“众所周知”过程。

如果您希望创建测试数据库,请尝试

rake db:test:prepare

您需要在MySQL中授予此用户访问权限:

GRANT ALL ON *.* TO 'arcsite_mysql'@'localhost' IDENTIFIED BY 'password';
Rails不会在MySQL中创建用户,它只使用一个存在的用户,这就是为什么在生成
数据库.yml
时会得到如下结果:

development:
  adapter: mysql2
  encoding: utf8
  database: blog_development
  pool: 5
  username: root
  password:
  socket: /tmp/mysql.sock

Rails假设root用户存在,并且在MySQL中拥有适当的权限(因为root拥有它所做的一切),如果没有,则必须创建它(如果使用MySQL,则会提示您输入root密码以创建用户,如果它没有exst),或者将其更改为一个有权限的用户。参考:第3.3.2节

mysql中是否存在用户
arcsite_mysql
?我认为,如果该用户存在并且具有适当的权限,则不应要求您输入根密码。如果不是这样的话,也许这样的事情会起作用:
将ALL ON**授予由“密码”标识的“arcsite_mysql”@“localhost”我以为Rails负责mysql中的用户创建?在我运行
rake db:create
命令之前,该用户不存在。稍微更新了问题。用户创建行为似乎有点奇怪我通常先自己创建DB用户,授予所有需要的访问权限,然后在database.yml文件中指定该用户/pwd。添加了一个注意和格式的答案,我真的不确定第一个DB创建是如何工作的如果用户不存在通常你会得到如下信息:
FATAL:role“user”不存在
我猜可能是以前创建/存在过,但权限不正确?我发布的命令只更新了一个现有用户,并没有根据truluck先生的上述评论创建一个,看起来arcsite_mysql只对一个数据库拥有权限。您需要授予该用户整个服务器实例的所有权限。稍微更新了该问题。用户创建行为似乎有点古怪我唯一要做的更正是rails将创建一个用户(尽管有一些古怪的副作用)。对我来说,最好是自己创建数据库和用户。只是想让人们意识到这种“魔力”,以防他们遇到问题。以下是与数据库创建相关的对话:。第4步提到了一些关于mysql用户创建的“众所周知”的过程,我不知道!我自己使用postgresql,据我所知,它在rails中没有相同的功能。我会更新我的答案。这里有一个链接,可以链接到rails中当前的commit:因为另一个有点过时,所以很奇怪。。。我很好奇为什么它现在失败了。