【发布时间】:2013-04-17 01:04:06
【问题描述】:
我正在启动一个新的 rails 3 应用程序,当我运行 rake db:create 时,它会询问我的 root mysql 密码,然后错误提示:
Mysql2::Error: Access denied for user 'arcsite_mysql'@'localhost' to database 'arcsite_mysql_test': CREATE DATABASE
arcsite_mysql_testDEFAULT CHARACTER SETutf8COLLATEutf8_unicode_ci
如果我在命令行上登录 mysql 并运行 show databases; 我会看到:
arcsite_mysql_development
如果我运行SHOW GRANTS FOR arcsite_mysql@localhost,我会看到:
GRANT ALL PRIVILEGES ON `arcsite_mysql_development`.* TO 'arcsite_mysql'@'localhost' WITH GRANT OPTION
我的数据库.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
因此,出于某种原因,只创建了开发数据库。
版本:
Rails 3.2.13
MySQL:服务器版本:5.6.10 源码分发
mysql2:mysql2-0.3.11
编辑
如果我手动将所有权限授予arcsite_mysql 用户,我可以创建表。但是是否期望 Rails 会为开发而不是为测试环境创建用户和表? arcsite_mysql 用户是我第一次运行 rake db:create 命令时由 rails 创建的。
编辑 2
提到了一些涉及创建 mysql 用户的“众所周知”过程。
【问题讨论】:
-
用户
arcsite_mysql是否存在于mysql中?如果该用户存在并且具有适当的权限,我认为它不应该要求您输入 root 密码。如果不是这样,也许这样的事情会起作用:GRANT ALL ON *.* TO 'arcsite_mysql'@'localhost' IDENTIFIED BY 'password'; -
我认为 Rails 负责在 mysql 中创建用户?在我运行
rake db:create命令之前,该用户不存在。 -
稍微更新了问题。用户创建行为似乎有点古怪
-
我通常会先自己创建数据库用户,授予所有需要的访问权限,然后在 database.yml 文件中指定该用户/密码。
-
添加了注意和格式化的答案,如果用户不存在,我不确定第一个数据库创建是如何工作的,通常你会得到类似的东西:
FATAL: role "user" does not exist我的猜测会不会是它之前制作/存在但权限不正确?我发布的命令只更新现有用户而不创建用户
标签: mysql ruby-on-rails rake mysql2