ruby-on-rails 如何调试ElasticBeanstalk错误“X%的请求在HTTP 5xx下失败”

23c0lvtd  于 2023-04-13  发布在  Ruby
关注(0)|答案(4)|浏览(152)

我的问题与AWS: None of the Instances are sending data类似,但错误消息略有不同。
我在ElasticBeanstalk上运行了一个Rails应用程序,它似乎运行正常。增强的健康监控会定期向我发送错误消息,例如:
环境运行状况已从正常转换为降级。20.0%的请求因HTTP 5xx而失败。
其中百分比变化高达100%。即使我没有做任何更改,一分钟后我收到一条后续消息,告诉我一切都恢复正常:
环境健康状况已从“降级”过渡到“良好”。
我已经从ElasticBeanstalk下载了完整的日志,但我不知道在哪里查看(在不同的目录中有大约20个不同的日志文件)。
我目前正在使用免费的AWS层,其中包含最小的数据库、服务器等示例。这可能是原因吗?我应该查看哪些日志文件,以及我应该查找什么?

zpjtge22

zpjtge221#

我在ElasticBeanstalk上运行rails应用程序,发现把Beanstalk看作一台计算机很有帮助(在本例中为Amazon EC2示例)运行Rails应用程序和Web服务器(乘客或美洲狮)。当你得到一个500错误,这可能是因为您的rails应用程序没有正确部署-在这种情况下,Passenger或Puma将返回错误-或者您的应用程序已正确部署,但遇到了与本地计算机上的错误类似的错误。
在这两种情况下,要诊断错误,请从AWS控制台下载完整的日志(打开正确的应用程序环境,然后选择日志〉请求日志〉完整日志〉下载)。部署错误更难诊断,但我建议从查看var-XX/logs/log/eb-activity.log开始。我怀疑你的错误来自你的rails应用程序本身,在这种情况下,我建议在var-XX/app/support/logs/passenger.logproduction.log中查找。要查找500错误,请搜索“500内部”,然后像对待任何其他Rails错误一样对待该错误。

1aaf6o9v

1aaf6o9v2#

您可以转到EC2示例并运行应用程序,就像在本地计算机上运行并查看日志一样。
您可以使用eb ssh命令将ssh插入到您的EC2示例中,然后转到/opt/python/目录(对于Ruby或其他编程语言,这将有所不同)。
/opt/python/run是您可以找到从EC2示例运行的应用程序版本的目录。在run目录中查找目录venvapp

**注意:**上面的文件夹结构是Python的,其他编程语言的部署后文件夹结构都是类似的,只要查找您的编程语言的部署环境的标准目录结构即可。

对于Python:

/opt/python: Root of where you application will end up.
/opt/python/current/app: The current application that is hosted in the environment.
/opt/python/on-deck/app: The app is initially put in on-deck and then, after all the deployment is complete, it will be moved to current. If you are getting failures in your container_commands, check out out the on-deck folder and not the current folder.
/opt/python/current/env: All the env variables that eb will set up for you. If you are trying to reproduce an error, you may first need to source /opt/python/current/env to get things set up as they would be when eb deploy is running.
/opt/python/run/venv: The virtual env used by your application; you will also need to run source /opt/python/run/venv/bin/activate if you are trying to reproduce an error.
2jcobegt

2jcobegt3#

我知道这是一个有点晚,但我想评论的技巧,我用找到错误,我用通过ssh连接,然后,一旦在应用程序中,我试图进入“rails console”它使用失败,但它通常显示你犯的错误.这个小技巧救了我的命好几次.希望它有帮助!

vxbzzdmp

vxbzzdmp4#

要调试出现此错误的原因,您需要下载日志,转到您的环境/logs/request logs/full logs。下载日志并转到web.stdout.log。希望现在您可以调试问题:)

相关问题