2009-11-13 8 views
36

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

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

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

Спасибо!

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

+0

Resque является ужасно, используйте Sidekiq. –

ответ

4

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

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

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

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

Я использую плагин resque, поэтому я создал каталог там (где установлен по умолчанию 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" 

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

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

+0

Чтобы отслеживать и создавать пустую папку для развертывания на производстве, просто добавьте новый файл '.gitkeep' в этот каталог и игнорировать этот каталог в файле '.gitignore'.Затем зафиксируйте его. – Autodidact

+0

Теперь вы можете монтировать resque-web как приложение стойки на подпункте вашего производственного приложения: http://railscasts.com/episodes/271-resque?view=asciicast – m33lky

8

Я только что понял это вчера вечером, для Капистрано вы должны использовать san_juan, тогда мне нравится использовать God для управления развертыванием рабочих. Что касается переживания перезагрузки, я не уверен, но я перезагружаюсь каждые 6 месяцев, поэтому я не слишком волнуюсь.

Хотя он предлагает разные способы его запуска, это то, что сработало для меня самым легким способом. (В вашем deploy.rb)

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

Для управления, где он работает, на другой сервер, и т.д., он охватывает, что в configuration section в 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, это сэкономит вам много времени на то, чтобы не создавать новых рабочих с Богом.

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

+0

Удивительный материал Гаррет, спасибо за вашу помощь! Вы правы, это было ДЕЙСТВИТЕЛЬНО запутанным. Я добавил несколько подробностей ниже, которые помогли мне настроить. –

+0

Гаррет, все еще немного смущенный на стороне бога. Вы используете их с san_juan? http://github.com/defunkt/resque/tree/master/examples/god/ Как бог получает новый код из репозитория на рабочих машинах при развертывании? Мои работники загружают окружающую среду. –

+0

Кроме того, я не понял, что они имели в виду с пользовательской задачей 'resque: setup'. Вы только что сделали такой, который загружает его с настройками по умолчанию? http://www.pastie.org/private/bxpevk0g7tfntmvhn6gew Я этого не понимал. –

29

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

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

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

+0

Спасибо tsmango! –

+0

Большая доля. Отбросил файл в моей папке config и заменил номер версии resque, найденный из 'bundle show resque'. Спасибо! –

1

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

https://gist.github.com/1060167