AWS Elastic Beanstalk 上的 Rails 应用程序:错误的 nginx 配置

Posted

技术标签:

【中文标题】AWS Elastic Beanstalk 上的 Rails 应用程序:错误的 nginx 配置【英文标题】:Rails app on AWS Elastic Beanstalk: Bad nginx config 【发布时间】:2019-02-23 21:22:03 【问题描述】:

所以我有一个 Rails 应用程序,几个月前我通过 AWS Elastic Beanstalk 构建和部署。该项目被搁置,因此我终止了环境,希望在我们返回该项目时能够重新部署。

尽管我的应用程序在我的本地开发环境中仍然运行良好,但我无法部署它。我的eb-activty.log 的错误:

PG::ConnectionBad: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

数据库是一个独立的 AWS RDS 实例,我可以成功测试到它的连接,所以我知道它正在运行。我已经添加了必要的环境变量并相应地配置了我的database.yml。需要明确的是,这是一个曾经可以工作的应用程序。在终止环境和重新部署之间,我没有进行任何更改。

根本问题似乎是 nginx 配置不正确,因为尝试访问服务器返回:

502 Bad Gateway
nginx/1.12.1

当我检查 nginx error.log 时,它充满了这样的错误:

2018/09/19 14:12:35 [crit] 3069#0: *653 connect() to unix:///var/run/puma/my_app.sock failed (2: No such file or directory) while connecting to upstream, client: 172.31.47.147, server: _, request: "GET / HTTP/1.1", upstream: "http://unix:///var/run/puma/my_app.sock:/", host: "172.31.47.147"

当然,我用谷歌搜索了我的错误,并找到了this *** post.

我已尝试将这些建议的行从我的puma.rb 的评价最高的答案中添加

bind "unix:///var/run/puma/my_app.sock"
pidfile "/var/run/puma/my_app.sock"

这根本没有引起任何变化。

我确保尝试了其他建议,包括直接查看 nginx 配置文件。我确实发现配置中没有设置上游。正如我所看到的,部署管道的 nginx 方面是由 Elastic Beanstalk 自动化的,所以很明显,我设置的其他内容一定是不正确的。

我发现在任何情况下我都无法使用eb deploy 部署应用程序,我只能通过每次创建一个新环境来进行更改。我无数次地重新创建了这个应用程序,尝试了不同的设置、gem 和包的版本、不同的 ruby​​ 版本……等等。总而言之,我仍然无法影响错误的更改,我什至无法获得新的错误!相同的 PG:ConnectionBad502 bad gateway 取决于我是从控制台还是浏览器查看。

从我的谷歌搜索中,我得到的印象是这在某些方面与 puma 有关,但 puma 对我来说有点像黑匣子。

我在这里感到很迷茫,非常感谢您愿意分享的任何指导。随时从任何日志或文件中询问更多信息,我很乐意提供更多详细信息。提前致谢!

【问题讨论】:

你在 Nginx 错误日志中的 unix 套接字路径中有很多斜杠,你能发布你定义套接字路径的 Nginx 配置部分吗? 路径是否存在? /var/run/puma/my_app.sock。检查文件夹权限以查看应用程序是否可以写入,并注意 selinux。然后检查 nginx 是否可以访问该路径 为什么pid文件指向socket?他们应该指向不同的文件! 【参考方案1】:

可能是 RDS 安全组,是否已配置为访问您的 elb?

您也可以尝试克隆数据库,以确保它不确定旧数据库是否存在奇怪的数据库问题,然后尝试连接到该数据库。

【讨论】:

【参考方案2】:

所以这不是一个很有帮助的答案,因为我从来没有解决过这个问题。不过,我不想让这个线程挂起。

我最终只是创建了一个新的 rails 环境,重新添加了所有 gem 并移植了我的控制器/视图/模型/路由。一旦我这样做了,我就可以毫无问题地进行部署。

我可以确认问题不在于安全组或数据库本身。新的 rails 应用程序能够毫无问题地访问 RDS 实例。

感谢大家的cmets和attemtps的帮助,非常感谢!

【讨论】:

我没有同样的运气,我只是从头开始重建项目,部署失败并出现同样的错误。有人以正确的方式解决了这个问题吗?

以上是关于AWS Elastic Beanstalk 上的 Rails 应用程序:错误的 nginx 配置的主要内容,如果未能解决你的问题,请参考以下文章

如何避免 AWS Elastic Beanstalk 上的 TooManyApplicationVersion 异常?

反应:AWS Elastic Beanstalk 上的 502 错误网关

AWS Elastic Beanstalk 上的 Wordpress

AWS Elastic Beanstalk 上的 Spring Boot 并记录到文件

AWS Elastic Beanstalk 上的 Django manage.py

如何获取命令以从 Elastic Beanstalk 上的 Dockerfile.aws.json 运行?