Как развернуть работников 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