Вопрос

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

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

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

Спасибо!

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

Это было полезно?

Решение 3

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

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

Во-первых, не забудьте, что вам нужно установить 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"

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

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

Другие советы

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

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

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

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

Я столкнулся с большими неприятностями, так что если вам нужна еще какая-либо помощь, просто оставьте комментарий.

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

#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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top