我正在使用 Rubber 部署 Rails 应用程序,但无法连接到 MySQL。我是否必须在 EC2 上手动设置 MySQL,或者 Rubber 是否应该已经这样做了? 虽然这不是很有帮助,但这里是运行 rake 时的日志输出:
** [out :: db01.memepluspl.us] rake aborted!
** [out :: db01.memepluspl.us]
** [out :: db01.memepluspl.us] Access denied for user ''@'db01.memepluspl.us' to database 'meme_plus_plus_production'
** [out :: db01.memepluspl.us]
** [out :: db01.memepluspl.us]
** [out :: db01.memepluspl.us] Tasks: TOP => db:migrate => environment
最佳答案
如果其他人遇到这个问题,那是因为 mysql 现在添加了默认的匿名用户,并且访问权限有限。
问题讨论here .
第一个解决方案不够全面,您需要最后一个删除所有匿名用户(不仅仅是本地主机)的解决方案。这是因为 MYSQL 将在 USER 之前在 HOST 上进行身份验证,因此匿名用户 ''@'your.host.com' 将优先于 'dbuser'@'your.host.com'(记录在 mysql documentation 中)和 rubber将尝试连接完整的主机名。
编辑你的./config/rubber/deploy-mysql.yml:
rubber.sudo_script "create_master_db", <<-ENDSCRIPT
mysql -u root -e "create database #{env.db_name};"
mysql -u root -e "delete from mysql.user where user='';" <<-- ADD THIS LINE
...
ENDSCRIPT
关于MySQL 无法连接到使用 Rubber 部署的 EC2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11144502/