Pergunta

Os caras do Github lançaram recentemente seu aplicativo de processamento de fundo, que usa Redis:http://github.com/defunkt/resque http://github.com/blog/542-introducting-resque

Eu tenho funcionando localmente, mas estou lutando para fazê -lo trabalhar em produção. Alguém tem um:

  1. Receita Capistrano para implantar trabalhadores (número de controle de trabalhadores, reiniciando -os, etc.)
  2. Trabalhadores implantados para separar as máquinas de onde o aplicativo principal está em execução, quais configurações eram necessárias aqui?
  3. Consegui Redis para sobreviver a uma reinicialização no servidor (tentei colocá -lo em Cron, mas sem sorte)
  4. Como você trabalhou com resque-web (seu excelente aplicativo de monitoramento) em sua implantação?

Obrigado!

PS Eu publiquei um problema no Github sobre isso, mas ainda não há resposta. Esperando que alguns gurus possam ajudar nessa, pois não tenho muita experiência em implantações. Obrigada!

Foi útil?

Solução 3

A resposta de Garrett realmente ajudou, só queria postar mais alguns detalhes. Demorou muito mexendo para acertar ...

Também estou usando o passageiro, mas o nginx em vez do apache.

Primeiro, não se esqueça que você precisa instalar Sinatra, isso me jogou por um tempo.sudo gem install sinatra

Em seguida, você precisa fazer um diretório para a execução e ele deve ter uma pasta pública e TMP. Eles podem estar vazios, mas o problema é que o GIT não economizará um diretório vazio no repositório. O diretório deve ter pelo menos um arquivo, então eu fiz alguns arquivos lixo como espaços reservados. Este é um recurso/bug estranho no Git.

Estou usando o plug -in Resque, então fiz o diretório lá (onde está a configuração padrão). Parece que Garrett fez um novo diretório 'resque' em seu Rails_root. Qualquer um deve funcionar. Para mim...

cd MY_RAILS_APP/vendor/plugins/resque/
mkdir public 
mkdir tmp
touch public/placeholder.txt
touch tmp/placeholder.txt

Então eu editei MY_RAILS_APP/vendor/plugins/resque/config.ru Então parece isso:

#!/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

Não se esqueça de mudar ADD_SOME_PASSWORD_HERE para a senha que você deseja usar para proteger o aplicativo.

Finalmente, estou usando o nginx, então aqui está o que eu adicionei ao meu nginx.conf

server {
  listen   80;
  server_name  resque.seoaholic.com;
  root /home/admin/public_html/seoaholic/current/vendor/plugins/resque/public;
  passenger_enabled on;
}

E assim é reiniciado em suas implantas, provavelmente algo assim em seu implantação.rb

run "touch #{current_path}/vendor/plugins/resque/tmp/restart.txt"

Não tenho muita certeza se essa é a melhor maneira, nunca configurei os aplicativos Rack/Sinatra antes. Mas funciona.

Isso é apenas para iniciar o aplicativo de monitoramento. Em seguida, preciso descobrir a parte de Deus.

Outras dicas

Estou um pouco atrasado para a festa, mas pensei em postar o que funcionou para mim. Essencialmente, tenho a configuração de Deus para monitorar Redis e Resque. Se eles não estão mais correndo, Deus os inicia de volta. Então, eu tenho uma tarefa de rake que é executada após uma implantação do Capistrano que deixa meus trabalhadores do Resque. Quando os trabalhadores forem desistindo, Deus começará a novos trabalhadores para que eles executem a base mais recente de código.

Aqui está o meu escrito completo de como eu uso o Resque na produção:

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

Acabei de descobrir isso ontem à noite, para Capistrano que você deveria usar San_juan, então eu gosto do uso de Deus para gerenciar a implantação de trabalhadores. Quanto a sobreviver a uma reinicialização, não tenho certeza, mas reiniciei a cada 6 meses, então não estou muito preocupado.

Embora ele sugira maneiras diferentes de iniciá -lo, foi isso que funcionou mais fácil para mim. (Dentro do seu implantação.rb)

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

Para gerenciar onde é executado, em outro servidor, etc., ele cobre isso no Seção de configuração do README.

Eu uso o passageiro na minha fatia, então foi relativamente fácil, eu só precisava ter um config.ru arquivo como assim:

require 'resque/server'

run Rack::URLMap.new \
  "/" => Resque::Server.new

Para o meu arquivo virtualhost que tenho:

<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>

Além disso, uma nota rápida. Certifique -se de sobrecarregar o resque:setup Tarefa de Rake, isso economizará muito tempo para desova novos trabalhadores com Deus.

Eu tive muitos problemas; portanto, se você precisar de mais ajuda, basta postar um comentário.

Use essas etapas em vez de fazer configuração com o nível do servidor da Web e editar o plug -in:

#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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top