Tyl*_*itt 4 mysql rake ruby-on-rails mysql2
我正在开始一个新的rails 3应用程序,当我运行rake db:create它请求我的root mysql密码然后错误说:
Mysql2 ::错误:用户'arcsite_mysql'@'localhost'拒绝访问数据库'arcsite_mysql_test':CREATE DATABASE
arcsite_mysql_testDEFAULT CHARACTER SETutf8COLLATEutf8_unicode_ci
如果我在命令行登录mysql并运行show databases;我看到:
arcsite_mysql_development
Run Code Online (Sandbox Code Playgroud)
如果我跑,SHOW GRANTS FOR arcsite_mysql@localhost我看到这个:
GRANT ALL PRIVILEGES ON `arcsite_mysql_development`.* TO 'arcsite_mysql'@'localhost' WITH GRANT OPTION
Run Code Online (Sandbox Code Playgroud)
我的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
Run Code Online (Sandbox Code Playgroud)
因此,出于某种原因,只创建了开发数据库.
版本:
Rails 3.2.13
MySQL:服务器版本:5.6.10源代码分发
mysql2:mysql2-0.3.11
编辑
如果我手动向arcsite_mysql用户授予所有权限,我可以创建表.但是,预计Rails会为开发而不是测试环境创建用户和表吗?第arcsite_mysql一次运行rake db:create命令时,用户是由rails创建的.
编辑2
点4:https://rails.lighthouseapp.com/projects/8994/tickets/1459-patch-better-dbcreate-for-mysql-do-not-assume-root-user
提到了一些涉及mysql用户创建的"众所周知"的过程.
您需要在MySQL中授予对此用户的访问权限:
GRANT ALL ON *.* TO 'arcsite_mysql'@'localhost' IDENTIFIED BY 'password';
Run Code Online (Sandbox Code Playgroud)
Rails不会在MySQL中创建一个用户,它只使用一个存在的用户,这就是为什么在生成database.yml你得到类似的东西时:
development:
adapter: mysql2
encoding: utf8
database: blog_development
pool: 5
username: root
password:
socket: /tmp/mysql.sock
Run Code Online (Sandbox Code Playgroud)
Rails假定root用户存在并且在MySQL中具有适当的权限(因为root拥有它所做的一切),如果不是,你必须创建它(如果使用MySQL,这将提示你输入root密码来创建用户,如果它没有)或者将其更改为.供参考:http://guides.rubyonrails.org/getting_started.html#configuring-a-database section 3.3.2