![](/img/trans.png)
[英]How can I run Rails background jobs with Resque on AWS Elastic Beanstalk?
[英]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.