9

私はちょうど私のレールアプリでAWS Elastic Beanstalkを使い始めました。バックグラウンドジョブ用にResque gemを使う必要があります。しかし、Elastic BeanstalkでResqueワーカーを実行する方法を検索するためのすべての努力にもかかわらず、私はどのように把握することができませんでしたか?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='*' 

EDIT は今私のresque.configファイルは次のようになります。

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

そして、それはまだ動作していません。 EDIT 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を実行することをお勧めします。これは、プロセスが終了するとワーカーが再起動されるようにするのに役立ちます。あなたはすべての時間を展開しない時にコマンドを実行する方法の

: フォルダに移動し、あなたの豆の木のインスタンスにSSHでログインします。/ opt/elasticbeanstalk /フック/ appdeploy/ ここでは、すべての時間を実行するフックのリストを見つけるでしょうあなたが展開するときに。ここでは、展開するたびに実行される独自のスクリプトを配置することもできます。同じアプローチでも、スクリプト をアプリケーションサーバの再起動を担当するフックに置き、sshで接続せずにバックグラウンドジョブを再起動することができます。

もう1つのオプションは、コマンドの代わりにbackground_workerを開始するコマンドを使用することです。

また、私はbeanstalkのカスタマイズに関するベスト記事を見てください:http://www.hudku.com/blog/tag/elastic-beanstalk/あなたのニーズに合わせてbeanstalk環境をカスタマイズするための良い出発点になります。 \

+0

あなたはcontainer_commandsの使い方について詳しく説明できますか?ドキュメントバージョンは、アプリケーションバージョンがデプロイされる前に実行されていることを示しています。その場合、どのように役立つのか分かりません。 – dangerousdave

+0

Webサーバーが実行されている瞬間に、アプリケーションが抽出される前に何らかのアクションを実行する必要がある場合に便利なコマンドです。期限切れから、それらは新しいサーバー上で一度実行されます。 container_commands - アプリケーションが抽出される前で、アプリケーションがデプロイされる前。 –

6

私はElastic BeanstalkのWeb環境の中でResqueのようなキューを実行するのに最適ではないと思います。 Web環境は、トラフィックや負荷が増加したときにWebアプリケーションをホストし、新しいインスタンスを生成するためのものです。ただし、複数のResqueキューをそれぞれ1つのインスタンスで実行することは意味がありません。

Elastic Beanstalkは、バックグラウンドタスクを実行するコードをホストするためのworker environmentsを提供しています。これらのワーカー環境はAmazon SQS queue(Resqueのような追加のキューソリューションを廃止)からジョブを引き出します。 Amazon SQSのキューは簡単に拡張でき、メンテナンスも簡単です(AWSだけでそれができます)。

Amazon SQSキューに付属しているワーカー環境を使用するには、サポートされている箱に入っていて、Elastic Beanstalk環境にうまく収まるため、意味があります。また、宝石、Active Elastic Jobが存在し、Rails> = 4.2アプリケーションが作業環境でバックグラウンドタスクを実行するのが簡単です。

免責事項:私はActive Elastic Jobの著者です。

+2

ワーカー環境は、小さな定期的なタスクを各サーバー上で実行したいときには夢中になります。 –

関連する問題