9

我剛開始使用AWS Elastic Beanstalk與我的rails應用程序,我需要使用resque gem作爲後臺作業。但是,儘管努力搜索如何在Elastic Beanstalk上運行Resque worker,但我一直無法弄清楚如何?如何在AWS Elastic Beanstalk上運行Rails後臺作業?

How can I run Rails background jobs with Resque on AWS Elastic Beanstalk?討論了在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工人。

+0

什麼使你困惑? –

+0

我會建議使用container_commands而不是命令。 –

+0

讓我感到困惑的是如何在每次部署後自動運行「rake resque:work QUEUE ='*'」命令,如果它是活着的並殺死並重新運行?我希望這是更具體的 –

回答

4

首先,我會建議在supervisord的幫助下運行resque,這將幫助您確保在進程死亡時重新啓動worker。

關於如何當你每一次部署運行命令: 登錄通過ssh到你的魔豆的實例去文件夾中:/ opt/elasticbeanstalk /鉤/ appdeploy/ 在這裏,你會發現,執行每一次的鉤子列表當你部署時。此外,您也可以在每次部署時執行自己的腳本。同樣的方法,您可以將腳本 掛鉤負責應用程序服務器重新啓動,並有能力重新啓動後臺作業,而無需通過ssh連接。

另一個選項,把你的命令啓動後臺工作器是用container_commands而不是命令。

另外,請看看我已經找到的有關豆莖定製的最好的文章:http://www.hudku.com/blog/tag/elastic-beanstalk/根據您的需要定製豆莖環境會是一個好的起點。 \

+0

我想知道您是否可以詳細說明container_commands的用法?文檔指出它們是在部署應用程序版本之前運行的,如果是這種情況,我不會看到它們如何有用。 – dangerousdave

+0

那麼,如果您需要在應用程序解壓縮之前執行某些操作,此時web服務器正在運行,那麼這些命令很有用。從expirence開始,它們會在新的服務器上執行一次。 container_commands - 提取應用程序時,但在部署應用程序之前。 –

6

我認爲在Elastic Beanstalk Web環境中運行隊列(例如Resque)是不理想的。 Web環境旨在託管Web應用程序,並在流量和負載增加時產生新的實例。但是,擁有多個Resque隊列是沒有意義的,每個隊列都在其中一個實例上運行。

Elastic Beanstalk提供了worker environments,它們旨在承載執行後臺任務的代碼。這些工作人員環境從Amazon SQS queue中抽取作業(這使得額外的隊列解決方案,如Resque,已過時)。 Amazon SQS隊列可輕鬆擴展並且易於維護(AWS只爲您服務)。

要使用Amazon SQS隊列附帶的工作環境,它更加合理,因爲它支持開箱即用,並且非常適合Elastic Beanstalk環境。還有一個gem,Active Elastic Job,這使得Rails> = 4.2應用程序很容易在工作環境中運行後臺任務。

免責聲明:我是Active Elastic Job的作者。

+2

當您只希望在每臺服務器上發生小型週期性任務時,工作環境看起來像是瘋狂的過度殺手。 –

相關問題