【发布时间】: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 stackoverflow 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:ConnectionBad 或 502 bad gateway 取决于我是从控制台还是浏览器查看。
从我的谷歌搜索中,我得到的印象是这在某些方面与 puma 有关,但 puma 对我来说有点像黑匣子。
我在这里感到很迷茫,非常感谢您愿意分享的任何指导。随时从任何日志或文件中询问更多信息,我很乐意提供更多详细信息。提前致谢!
【问题讨论】:
-
你在 Nginx 错误日志中的 unix 套接字路径中有很多斜杠,你能发布你定义套接字路径的 Nginx 配置部分吗?
-
路径是否存在?
/var/run/puma/my_app.sock。检查文件夹权限以查看应用程序是否可以写入,并注意 selinux。然后检查 nginx 是否可以访问该路径 -
为什么pid文件指向socket?他们应该指向不同的文件!
标签: ruby-on-rails amazon-web-services nginx puma amazon-elastic-beanstalk