Ome*_*mel 9 ruby-on-rails amazon-web-services resque amazon-elastic-beanstalk
我刚刚开始在我的rails应用程序中使用AWS Elastic Beanstalk,我需要将Resque gem用于后台作业.然而,尽管我们都在努力搜索如何在Elastic Beanstalk上运行Resque worker,但我还是无法弄清楚如何?
如何在AWS Elastic Beanstalk上使用Resque运行Rails后台作业?谈到在Elastic Beanstalk容器中将它们作为服务运行,但是,它仍然非常令人困惑.
这里是我的ebextentions resque.config文件:
services:
sysvinit:
resque_worker:
enabled: true
ensureRunning: true
commands:
resque_starter:
rake resque:work QUEUE='*'
Run Code Online (Sandbox Code Playgroud)
编辑 现在我的resque.config文件如下所示:
container_commands:
resque_starter: "rake resque:work QUEUE='*'"
services:
sysvinit:
resque_worker:
enabled: true
ensureRunning: true
commands:
resque_starter
Run Code Online (Sandbox Code Playgroud)
它仍然无法正常工作. 编辑2
container_commands:
resque_starter:
command: "rake resque:work QUEUE=sqs_message_sender_queue"
cwd: /var/app/current/
ignoreErrors: true
Run Code Online (Sandbox Code Playgroud)
它仍显示0名工人.
我认为在Elastic Beanstalk Web环境中运行队列(如Resque)并不是最理想的.Web环境旨在托管Web应用程序,并在流量和负载增加时生成新实例.但是,拥有多个Resque队列是没有意义的,每个队列都运行在其中一个实例上.
Elastic Beanstalk提供工作者环境,用于托管执行后台任务的代码.这些工作环境从Amazon SQS队列中拉出作业(这会产生额外的队列解决方案,如Resque,已过时).Amazon SQS队列易于扩展,易于维护(AWS只为您完成).
使用Amazon SQS队列附带的工作环境更有意义,因为它支持开箱即用,非常适合Elastic Beanstalk环境.还有一个gem,Active Elastic Job,它使Rails> = 4.2应用程序在工作环境中运行后台任务变得简单.
免责声明:我是Active Elastic Job的作者.
首先,我建议在supervisord的帮助下运行resque,这将帮助您确保如果进程死亡,工作人员将重新启动。
关于每次部署时如何运行命令:通过 ssh 登录到 beanstalk 实例,转到文件夹:/opt/elasticbeanstalk/hooks/appdeploy/ 在这里,您将找到每次部署时执行的钩子列表。您还可以在这里放置自己的脚本,每次部署时都会执行该脚本。另外,使用相同的方法,您可以将脚本放入负责应用程序服务器重新启动的钩子中,并且能够在不通过 ssh 连接的情况下重新启动后台作业。
另一种选择是,启动后台工作程序的命令是使用 container_commands 而不是命令。
另外,请查看我发现的有关 beanstalk 定制的最佳文章:http://www.hudku.com/blog/tag/elastic-beanstalk/这将是根据您的需要定制 beanstalk 环境的良好起点。\
| 归档时间: |
|
| 查看次数: |
3492 次 |
| 最近记录: |