gpt4 book ai didi

mysql - 尽管 Capistrano 和 MySQL Workbench 可以连接,但 Rails 无法连接到 MySQL

转载 作者:行者123 更新时间:2023-11-29 23:17:13 25 4
gpt4 key购买 nike

我刚刚部署了 Rails 应用程序,创建了 MySQL 模式并通过 capistrano 复制了 database.yml。我在 MySQL Workbench 中看到了数据库表(它通过 SSH 隧道记录到我的 VPS 主机)。

当我尝试通过网络访问我的 Rails 应用程序时,我得到了

Action Controller Exception: Mysql2::Error Can't connect to MySQL server on '127.0.0.1' (111)

我很困惑。 database.yml 中的设置与 MySQL Workbench 中的设置相同。如果它们存在任何问题,Capistrano 将无法创建模式。我检查了服务器上的database.yml确实已被复制。它也已正确符号链接(symbolic link)。可能是什么问题呢?我该如何调试这个案例?我检查了生产日志,没有看到任何可以解释这种情况的信息。能给点建议吗?

仅供引用:我正在使用 nginx 和乘客。

最佳答案

@Mohammad AbuShady:你是对的。这就是问题所在。谢谢你!如果您输入它作为答案,我会接受它。

所以这个谜团得到了解决 - 似乎 Rails 应用程序在开发环境中的生产服务器上运行,而不是在生产中运行,尽管我使用 cap production deploy 来部署它。我写了一篇关于它的详细博客文章here 。短篇小说:

问题在于 Rails 堆栈的设置有些困惑。环境可以设置在多个地方。在这种特殊情况下,我相信问题出在/etc/nginx/nginx.conf 中的以下行:

server {
rack_env development;

显然,它优于我将环境设置为“生产”的其他地方(例如deploy.rb)。

问题是database.yml中的开发设置不包含正确的数据库设置(它们应该只在我的笔记本电脑上工作),因此应用程序在建立与MySQL的连接时遇到问题也就不足为奇了。

如果有人偶然发现同样的问题,我会推荐以下调试策略:在生产服务器上应用程序的根目录中调用 rails console (类似于 /home/deploy_user/my_app/current)并在那里运行 Rails.env。它将显示应用程序正在运行的环境。另一种检查方法是查看日志目录(例如 /home/deploy_user/my_app/shared/log)。就我而言,文件development.log 的时间戳比文件product.log 更新得多。当我打开它时,我可以清楚地看到产生MySQL错误的HTTP请求日志(时间相同,IP地址是我的测试机的IP地址)。因此很明显,我正在询问一个在开发模式下运行的应用程序。

关于mysql - 尽管 Capistrano 和 MySQL Workbench 可以连接,但 Rails 无法连接到 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27673492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com