【问题标题】:Rails: Why does Rake require the Mysql root user?Rails:为什么 Rake 需要 Mysql root 用户?
【发布时间】:2015-11-18 14:35:37
【问题描述】:

我在尝试运行 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 用户? (对我来说似乎违反了安全逻辑。)这里最好的解决方案是什么?

【问题讨论】:

  • 您已经设置了您的生产用户,但是您在执行 rake 时是否传递了 RAILS_ENV?即 bundle exec rake db:create RAILS_ENV=production
  • @DanielLutz - 哎呀,当然是这样。请将其添加为答案,以便我接受。

标签: mysql ruby-on-rails rake


【解决方案1】:

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

即:

bundle exec rake db:create RAILS_ENV=production

【讨论】:

  • 你在 dev 下工作的时候怎么样?或者如果您只想将更改部署到 staging 呢?等等? (如果你不在生产环境下工作,这只会崩溃)
【解决方案2】:

以上答案在我的情况下不起作用,这个问题真的很笼统,所以我的情况很糟糕,此外,如果你不知道自己在做什么,那么在生产环境中运行可能真的很危险......小心处理。

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

config/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 %>

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

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    相关资源
    最近更新 更多