簡體   English   中英

如何在AWS Elastic Beanstalk上運行Rails后台作業?

[英]How can I run Rails background jobs on AWS 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='*'

編輯現在我的resque.config文件如下所示:

container_commands:
  resque_starter: "rake resque:work QUEUE='*'"
services: 
  sysvinit:
    resque_worker:
      enabled: true
        ensureRunning: true
      commands: 
        resque_starter

它仍然無法正常工作。 編輯2

container_commands:
  resque_starter: 
    command: "rake resque:work QUEUE=sqs_message_sender_queue"
    cwd: /var/app/current/
    ignoreErrors: true

它仍顯示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,這將幫助您確保在進程死亡時將重新啟動worker。

關於每次部署時如何運行命令:通過ssh登錄到beanstalk實例轉到文件夾:/ opt / elasticbeanstalk / hooks / appdeploy /這里您將找到每次部署時執行的掛鈎列表。 此外,您可以放置​​自己的腳本,每次部署時都會執行。 使用相同的方法,您可以將腳本放到負責應用程序服務器重啟的鈎子上,並且能夠在沒有ssh連接的情況下重新啟動后台作業。

另一個選項是,啟動后台工作程序的命令是使用container_commands而不是命令。

另外,請查看我發現的有關beanstalk定制的最佳文章: http ://www.hudku.com/blog/tag/elastic-beanstalk/這將是為您的需求定制beanstalk環境的良好起點。 \\

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM