gpt4 book ai didi

ruby-on-rails - 在 Amazon Elastic Beanstalk 上部署 rails 项目时如何自动重启 delay_job?

转载 作者:行者123 更新时间:2023-12-03 15:19:08 24 4
gpt4 key购买 nike

我在 Amazon Elastic Beanstalk 上主持一个 rails 项目我尝试配置一个 container command自动重启我的 delayed_job每次部署后服务器上的工作人员。

我试过这个:

container_commands:
restartdelayedjob:
command: "RAILS_ENV=production script/delayed_job --pid-dir=/home/ec2-user/pids start"
cwd: /var/app/current

但是,似乎在重新启动工作程序后部署了推送版本,因此工作程序无法处理作业。

当我通过 ssh 连接到我的实例时,杀死工作进程并从部署的版本文件夹中重新启动一个新的,一切正常。

你对我如何处理这个有什么想法吗?

谢谢

最佳答案

根据 Amazon documentation for container_commands :

They run after the application and web server have been set up and the application version file has been extracted, but before the application version is deployed.



(强调我的)

这意味着在那一点 /var/app/current您将其设置为 cwd因为您的命令仍然指向以前的版本。但是,默认情况下,再次来自文档, cwd :

is the directory of the unzipped application.



这意味着如果你想运行 delayed_job从刚刚提取(但尚未部署)的应用程序目录中,不要覆盖 cwd它应该为即将部署的应用程序启动 delay_job。

引用: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-container_commands

更新:

我现在自己进行了设置,发现通过标准 container_commands 进行设置有一些限制。 - 基本上delayed_job 会在它仍然在 /var/app/ondeck 时启动目录。通常这是可以的,但是我在某些作业上遇到了一些问题,因为该路径卡在它周围会导致错误,因为该应用程序现在位于 /var/app/current 中。 .

我发现了一种未记录的(所以警告!)方法,您可以添加要在应用服务器重新启动后运行的脚本(并且您的新部署在 /var/app/current 中)。

基本上 Elastic Beanstalk 将执行 /opt/elasticbeanstalk/hooks/appdeploy/post 中的任何脚本Web 服务器重新启动后。这意味着如果您将 shell 脚本放在此目录中,它们将被运行。

我创建了一个这样的shell脚本:
#!/usr/bin/env bash
. /opt/elasticbeanstalk/support/envvars
cd $EB_CONFIG_APP_CURRENT
su -c "RAILS_ENV=production script/delayed_job --pid-dir=$EB_CONFIG_APP_SUPPORT/pids restart" $EB_CONFIG_APP_USER

我将此脚本上传到 S3 存储桶,并确保它是“公开的”。然后,您可以在 .ebextensions 中使用选项脚本。目录(例如 99delayed_job.config )将此脚本部署为您的应用程序部署的一部分,请注意 post目录可能不存在:
commands:
create_post_dir:
command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post"
ignoreErrors: true
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/99_restart_delayed_job.sh":
mode: "000755"
owner: root
group: root
source: http://YOUR_BUCKET.s3.amazonaws.com/99_restart_delayed_job.sh

部署时,您应该会在 /var/log/eb-tools.log 中看到类似的内容。 :
2013-05-16 01:20:53,759 [INFO] (6467 MainThread) [directoryHooksExecutor.py-29] [root directoryHooksExecutor info] Executing directory: /opt/elasticbeanstalk/hooks/appdeploy/post/
2013-05-16 01:20:53,760 [INFO] (6467 MainThread) [directoryHooksExecutor.py-29] [root directoryHooksExecutor info] Executing script: /opt/elasticbeanstalk/hooks/appdeploy/post/99_restart_delayed_job.sh
2013-05-16 01:21:02,619 [INFO] (6467 MainThread) [directoryHooksExecutor.py-29] [root directoryHooksExecutor info] Output from script: delayed_job: trying to stop process with pid 6139...
delayed_job: process with pid 6139 successfully stopped.

2013-05-16 01:21:02,620 [INFO] (6467 MainThread) [directoryHooksExecutor.py-29] [root directoryHooksExecutor info] Script succeeded.

正如我所说,将东西放在这个“post”目录中是没有记录的 - 但希望亚马逊在某个时候为 .options 添加实际支持在部署后运行命令的脚本,在这种情况下,您可以将其移至官方支持的方法。

关于ruby-on-rails - 在 Amazon Elastic Beanstalk 上部署 rails 项目时如何自动重启 delay_job?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14401204/

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