Rails:为什么Rake需要Mysql root用户?

时间:2015-11-18 14:35:37

标签: mysql ruby-on-rails rake

尝试运行RAKE任务时出现以下错误:

rake aborted!
Mysql2::Error: Access denied for user 'root'@'localhost' (using password: YES)

我的database.yml文件如下所示:

production:
  [...]
  database: <some_database_name>
  username: <a_non_root_user>
  password: <password_for_above_non_root_user>

正如您所见,冲突是:

  • 我使用非root用户访问数据库,但
  • Rake想要使用root用户(出于我看不到的原因)

这是否意味着我应该在database.yml配置中使用root用户? (对我来说似乎违反安全逻辑。)这里最好的解决方案是什么?

2 个答案:

答案 0 :(得分:0)

您需要将环境设置为生产。

即:

bundle exec rake db:create RAILS_ENV=production

答案 1 :(得分:-1)

上面的答案在我的情况下没有用,问题是非常通用的,所以加重了我的情况,除了如果你不知道你在做什么,反对生产的事实真的很危险....小心。

相反,我为解决这个问题所做的只是更新

配置/ database.yml的

default: &default
  adapter: mysql2
  encoding: utf8mb4
  charset: utf8mb4
  pool: 5
  username: root
  password: your_password

development:
  <<: *default
  database: your_database_name
  host: <%= Settings.db.default.host %>
  port: <%= Settings.db.default.port %>

这样你的bundle / rake任务就会加载这些值而不要在运行时询问它们...还记得你在正确的文件夹路径(ruby on rails项目的根路径)

希望这有帮助!

我遇到了这个问题,对我来说正是这个(facepalm)我完全忘记了我的配置文件:P

另一种选择是使用

  username: <%= Settings.db.default.username %>
  password: <%= Settings.db.default.password %>

所以请记住,您需要将这些值设置为操作系统变量