Как развернуть работников resque в производстве?

Недавно ребята из GitHub выпустили приложение для фоновой обработки, которое использует Redis: http://github.com/defunkt/resque http://github.com/blog/542-introducing-resque

У меня он работает на местном уровне, но я изо всех сил стараюсь заставить его работать на производстве. Кто-нибудь получил:

  • Рецепт Capistrano для развертывания работников (контрольный номер рабочих, перезапуск и т.д.)
  • Развернутые рабочие для разделения машин (ов), с которых работает основное приложение, какие настройки нужны здесь?
  • получил redis, чтобы пережить перезагрузку на сервере (я попытался поместить его в cron, но не повезло)
  • Как вы применили resque-web (их отличное приложение для мониторинга) в своем развертывании?

Спасибо!

P.S. Я опубликовал вопрос о Github об этом, но ответа пока нет. Надеясь, что некоторые SO гуру могут помочь в этом, так как я не очень разбираюсь в развертываниях. Спасибо!

Ответ 1

Ответ Garrett действительно помог, просто хотел опубликовать несколько подробностей. Это заняло много времени, чтобы понять это правильно.

Я использую также пассажира, но nginx вместо apache.

Во-первых, не забывайте, что вам нужно установить синатра, это меня бросило на некоторое время. sudo gem install sinatra

Затем вам нужно создать каталог для запуска этой вещи, и она должна иметь общедоступную и tmp-папку. Они могут быть пустыми, но проблема в том, что git не сохранит пустую директорию в репо. В каталоге должен быть хотя бы один файл, поэтому я сделал некоторые ненужные файлы в качестве заполнителей. Это странная функция/ошибка в git.

Я использую плагин resque, поэтому я создал каталог там (где установлен default config.ru). Похоже, что Гарретт создал новый рекреационный каталог в своем rails_root. Любой должен работать. Для меня...

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"

Я не уверен, что это лучший способ, я никогда раньше не устанавливал приложения для стойки/синатра. Но он работает.

Это просто, чтобы запустить приложение для мониторинга. Затем мне нужно выяснить часть бога.

Ответ 2

Я немного опоздал на вечеринку, но думал, что напишу, что сработало для меня. По сути, у меня есть божественная установка для мониторинга redis и resque. Если они больше не бегут, бог начинает их поддерживать. Затем у меня есть задача грабли, которая запускается после развертывания capistrano, которая завершает работу моих рабочих. Когда рабочие уйдут, бог начнет новых рабочих, чтобы они работали с последней кодовой базой.

Вот моя полная запись о том, как я использую resque в производстве:

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

Ответ 3

Я только что понял это вчера вечером, для Capistrano вы должны использовать 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 rake, это сэкономит вам много времени, чтобы создать новых рабочих с Богом.

У меня возникло множество проблем, поэтому, если вам нужна дополнительная помощь, просто опубликуйте комментарий.

Ответ 4

используйте эти шаги вместо настройки с уровнем веб-сервера и плагином редактирования

https://gist.github.com/1060167