Как развернуть работники resque на производстве? - PullRequest
37 голосов
/ 14 ноября 2009

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

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

  1. Рецепт Capistrano для развертывания рабочих (контроль количества рабочих, их перезапуск и т. Д.)
  2. Развертывание рабочих на отдельных машинах, на которых работает основное приложение, какие настройки здесь были необходимы?
  3. получил redis, чтобы пережить перезагрузку на сервере (я пытался поместить его в cron, но безуспешно)
  4. как вы работали с Resque-Web (отличным приложением для мониторинга) в своем развертывании?

Спасибо!

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

Ответы [ 4 ]

29 голосов
/ 27 мая 2010

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

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

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

9 голосов
/ 15 ноября 2009

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

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

4 голосов
/ 18 ноября 2009

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

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

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

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

Я использую плагин resque, поэтому я сделал каталог там (где по умолчанию config.ru). Похоже, что Гаррет создал новый каталог «resque» в своем 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"

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

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

1 голос
/ 04 июля 2011

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

#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

...