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

Rails app on AWS Elastic Beanstalk: Bad nginx config

所以我有一个 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 没有正确配置,因为试图访问服务器 returns:

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 Whosebug post.

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

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

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

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

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

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

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

可能是 RDS 安全组,是否配置为到达您的 elb?

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

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

我最终只是创建了一个新的 rails 环境,重新添加了所有的 gem 并移植了我的 controllers/views/models/routes。一旦我这样做了,我就能够毫无问题地进行部署。

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

感谢大家的评论和帮助,非常感谢!