web-dev-qa-db-ja.com

レスキューワーカーを運用環境に展開するにはどうすればよいですか?

GitHubの連中は最近、Redisを使用するバックグラウンド処理アプリをリリースしました: http://github.com/defunkt/resquehttp://github.com/blog/542-introducing-resque

ローカルで動作していますが、本番環境で動作させるのに苦労しています。誰かが持っています:

  1. ワーカーを配置するためのカピストラーノレシピ(ワーカー数の制御、再起動など)
  2. メインアプリが実行されているマシンとは別のマシンにワーカーをデプロイしましたが、ここでどの設定が必要でしたか?
  3. サーバーの再起動を生き残るためにredisを取得しました(cronに入れてみましたが運がありませんでした)
  4. デプロイにresque-web(優れた監視アプリ)をどのように使用しましたか?

ありがとう!

追伸これについてGithubに問題を投稿しましたが、まだ応答がありません。 SO gurusが配備の経験があまりないので、これを手伝ってくれることを願っています。ありがとうございます!

38
Brian Armstrong

ギャレットの答えは本当に役に立ちました、もう少し詳細を投稿したかっただけです。それを正しくするために多くのいじくりが必要でした...

私もパッセンジャーを使用していますが、Apacheの代わりにnginxを使用しています。

まず、sinatraをインストールする必要があることを忘れないでください。 Sudo gem install sinatra

次に、事物を実行するためのディレクトリを作成する必要があります。これには、パブリックフォルダーとtmpフォルダーが必要です。空でもかまいませんが、問題はgitが空のディレクトリをリポジトリに保存しないことです。ディレクトリには少なくとも1つのファイルが必要なので、プレースホルダーとしていくつかのジャンクファイルを作成しました。これはgitの奇妙な機能/バグです。

Resqueプラグインを使用しているので、そこにディレクトリを作成しました(デフォルトのconfig.ruがある場所)。 GarrettがRails_rootに新しい「resque」ディレクトリを作成したようです。どちらでもうまくいくはずです。私のために...

cd MY_Rails_APP/vendor/plugins/resque/
mkdir public 
mkdir tmp
touch public/placeholder.txt
touch tmp/placeholder.txt

次に、MY_Rails_APP/vendor/plugins/resque/config.ruを編集して、次のようにします。

#!/usr/bin/env Ruby
require 'logger'

$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/lib')
require 'resque/server'

use Rack::ShowExceptions

# Set the AUTH env variable to your basic auth password to protect Resque.
AUTH_PASSWORD = "ADD_SOME_PASSWORD_HERE"
if AUTH_PASSWORD
  Resque::Server.use Rack::Auth::Basic do |username, password|
    password == AUTH_PASSWORD
  end
end

run Resque::Server.new

アプリを保護するために使用するパスワードにADD_SOME_PASSWORD_HEREを変更することを忘れないでください。

最後に、私はNginxを使用しているので、これが私のnginx.confに追加したものです

server {
  listen   80;
  server_name  resque.seoaholic.com;
  root /home/admin/public_html/seoaholic/current/vendor/plugins/resque/public;
  passenger_enabled on;
}

そして、デプロイ時に再起動されます。おそらく、deploy.rbで次のようになります。

run "touch #{current_path}/vendor/plugins/resque/tmp/restart.txt"

これが最善の方法であるかどうかは本当にわかりません。これまでラック/シナトラアプリをセットアップしたことがありません。しかし、それは機能します。

これは、監視アプリを実行するためのものです。次に、神の部分を理解する必要があります。

4
Brian Armstrong

パーティーには少し遅れますが、うまくいったことを投稿したいと思いました。基本的に、私はredisとresqueを監視するための神の設定をしています。それらがもう実行されていない場合、神はそれらをバックアップし始めます。次に、capistranoのデプロイ後に実行される熊手タスクがあり、レスキューワーカーが終了します。ワーカーが終了すると、godは新しいワーカーを起動し、最新のコードベースを実行します。

これが、本番環境でのresqueの使用方法に関する私の完全な記事です。

http://thomasmango.com/2010/05/27/resque-in-production

29
tsmango

昨夜これを理解しました。カピストラーノの場合は san_juan を使用する必要があります。次に、ワーカーの展開を管理するために God を使用するのが好きです。再起動の存続についてはわかりませんが、6か月ごとに再起動しているのであまり心配していません。

彼はそれを開始するさまざまな方法を提案していますが、これが私にとって最も簡単に機能したものです。 (deploy.rb内)

require 'san_juan'
after "deploy:symlink", "god:app:reload"
after "deploy:symlink", "god:app:start"

別のサーバーなどで実行する場所を管理するために、彼はREADMEの-​​ 構成セクション でそれをカバーしています。

私はスライスにPassengerを使用しているので、比較的簡単でした。config.ruファイルは次のようになります。

require 'resque/server'

run Rack::URLMap.new \
  "/" => Resque::Server.new

私のVirtualHostファイルの場合:

<VirtualHost *:80>
        ServerName resque.server.com
        DocumentRoot /var/www/server.com/current/resque/public

        <Location />
          AuthType Basic
          AuthName "Resque Workers"
          AuthUserFile /var/www/server.com/current/resque/.htpasswd
          Require valid-user
        </Location>
</VirtualHost>

また、簡単なメモ。 resque:setupレーキタスク、それはあなたに神と一緒に新しい労働者を生み出すための多くの時間を節約します。

私は多くのトラブルに遭遇したので、さらに助けが必要な場合は、コメントを投稿してください。

9
Garrett

Webサーバーレベルで設定を行い、プラグインを編集する代わりに、次の手順を使用します。

#The steps need to be performed to use resque-web with in your application

#In routes.rb

ApplicationName::Application.routes.draw do
  resources :some_controller_name
  mount Resque::Server, :at=> "/resque"
end

#That's it now you can access it from within your application i.e
#http://localhost:3000/resque

#To be insured that that Resque::Server is loaded add its requirement condition in Gemfile

gem 'resque', :require=>"resque/server"

#To add  basic http authentication add resque_auth.rb file in initializers folder and add these lines for the security

Resque::Server.use(Rack::Auth::Basic) do |user, password|
  password == "secret"
end

#That's It !!!!! :)

#Thanks to Ryan from RailsCasts for this valuable information.
#http://railscasts.com/episodes/271-resque?autoplay=true 

https://Gist.github.com/1060167

1
Gul