39

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

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

  1. ワーカーをデプロイする Capistrano レシピ (ワーカー数の制御、再起動など)
  2. メインアプリが実行されている場所からマシンを分離するためにワーカーをデプロイしました。ここではどのような設定が必要でしたか?
  3. サーバーで再起動しても生き残るためにredisを取得しました(cronに入れてみましたが、うまくいきませんでした)
  4. resque-web (同社の優れた監視アプリ) をデプロイにどのように取り入れましたか?

ありがとう!

PSこれについてGithubに問題を投稿しましたが、まだ応答がありません。私は展開の経験があまりないので、SOの達人がこれを手伝ってくれることを願っています。ありがとうございました!

4

4 に答える 4

29

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

これが私が本番環境でresqueをどのように使用するかについての私の完全な記事です:

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

于 2010-05-27T16:45:22.027 に答える
9

私は昨夜これを理解しました.Capistranoの場合はsan_juanを使用する必要があります.それから私はの使用が労働者の展開を管理するのが好きです. 再起動に耐えるかどうかはわかりませんが、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:setuprake タスクをオーバーライドしてください。これにより、God で新しいワーカーを生成する時間を大幅に節約できます。

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

于 2009-11-14T21:28:16.410 に答える
4

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

私はパッセンジャーも使用していますが、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"

これが最善の方法であるかどうかはよくわかりません.rack/sinatraアプリをセットアップしたことがありません. しかし、それは機能します。

これは、監視アプリを起動するためのものです。次に、神の部分を把握する必要があります。

于 2009-11-18T20:51:50.570 に答える
1

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

于 2011-07-04T11:08:41.237 に答える