如何在AWS Elastic Beanstalk上运行Rails后台作业?

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名工人.

Taw*_*wan 9

我认为在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的作者.

  • 当你只想在每台服务器上发生小周期性任务时,工作者环境似乎是疯狂的矫枉过正. (5认同)

Vad*_*rov 4

首先,我建议在supervisord的帮助下运行resque,这将帮助您确保如果进程死亡,工作人员将重新启动。

关于每次部署时如何运行命令:通过 ssh 登录到 beanstalk 实例,转到文件夹:/opt/elasticbeanstalk/hooks/appdeploy/ 在这里,您将找到每次部署时执行的钩子列表。您还可以在这里放置自己的脚本,每次部署时都会执行该脚本。另外,使用相同的方法,您可以将脚本放入负责应用程序服务器重新启动的钩子中,并且能够在不通过 ssh 连接的情况下重新启动后台作业。

另一种选择是,启动后台工作程序的命令是使用 container_commands 而不是命令。

另外,请查看我发现的有关 beanstalk 定制的最佳文章:http://www.hudku.com/blog/tag/elastic-beanstalk/这将是根据您的需要定制 beanstalk 环境的良好起点。\