Como implantar trabalhadores da Resque na produção?
-
20-09-2019 - |
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:
- Receita Capistrano para implantar trabalhadores (número de controle de trabalhadores, reiniciando -os, etc.)
- Trabalhadores implantados para separar as máquinas de onde o aplicativo principal está em execução, quais configurações eram necessárias aqui?
- Consegui Redis para sobreviver a uma reinicialização no servidor (tentei colocá -lo em Cron, mas sem sorte)
- 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!
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:
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