Come distribuire lavoratori Resque in produzione?
-
20-09-2019 - |
Domanda
I ragazzi GitHub ha recentemente pubblicato il loro app elaborazione in background che utilizza Redis: http://github.com/defunkt/resque http://github.com/blog/542-introducing-resque
L'ho lavoro a livello locale, ma sto lottando per farlo funzionare in produzione. Qualcuno ha ottenuto una:
- Capistrano ricetta per distribuire lavoratori (numero di controllo dei lavoratori, riavviarli, etc)
- lavoratori distaccati a macchina separata (s) da dove l'applicazione principale è in esecuzione, quali impostazioni fosse bisogno qui?
- Redis ottenuto per sopravvivere un riavvio del server (ho provato a mettere in cron ma senza fortuna)
- Come avete lavorato resque-web (la loro eccellente monitoraggio app) nella vostra deploy?
Grazie!
P.S. Ho pubblicato un problema su Github di questo, ma nessuna risposta ancora. Sperando alcuni così guru può aiutare su questo come io non sono molto esperto nelle distribuzioni. Grazie!
Soluzione 3
La risposta di Garrett ha veramente aiutato, voleva solo per pubblicare un qualche dettaglio in più. Ci sono voluti un sacco di ritocchi per farlo bene ...
sto usando dei passeggeri anche, ma nginx invece di Apache.
In primo luogo, non dimenticare che è necessario installare Sinatra, questo mi ha buttato per un po '.
sudo gem install sinatra
Poi è necessario creare una directory per la cosa a correre, e deve avere una cartella pubblica e tmp. Possono essere vuota, ma il problema è che git non salverà una directory vuota nel repository. La directory deve avere almeno un file in esso, così ho fatto alcuni file spazzatura come segnaposto. Questa è una strana caratteristica / bug in git.
Sto usando il plugin resque, così ho fatto la directory lì (dove il default è config.ru). Sembra Garrett ha fatto una nuova directory 'Resque' nel suo rails_root. O si dovrebbe lavorare. Per me ...
cd MY_RAILS_APP/vendor/plugins/resque/
mkdir public
mkdir tmp
touch public/placeholder.txt
touch tmp/placeholder.txt
Poi ho modificato MY_RAILS_APP/vendor/plugins/resque/config.ru
in modo che appaia in questo modo:
#!/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
Non dimenticare di cambiare ADD_SOME_PASSWORD_HERE
alla password che si desidera utilizzare per proteggere l'applicazione.
Infine, sto usando Nginx ecco quello che ho aggiunto alla mia 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 così viene riavviato sulle tue dell'airbag, probabilmente qualcosa di simile nel tuo deploy.rb
run "touch #{current_path}/vendor/plugins/resque/tmp/restart.txt"
In realtà non sono sicuro se questo è il modo migliore, non ho mai cremagliera di installazione / apps Sinatra prima. Ma funziona.
Questo è solo per ottenere l'applicazione di monitoraggio in corso. Poi ho bisogno di capire la parte di Dio.
Altri suggerimenti
Sono un po 'in ritardo alla festa, ma ho pensato di postare quello che ha funzionato per me. In sostanza, Ho installato dio di monitorare Redis e Resque. Se essi non sono in esecuzione più, Dio li avvia il backup. Poi, ho un compito rastrello che viene eseguito dopo un'implementare Capistrano che chiude miei operai Resque. Una volta che i lavoratori sono uscire, Dio si avvierà nuovi lavoratori in modo che si sta eseguendo l'ultima base di codice.
Ecco la mia piena interessante resoconto di come uso Resque nella produzione:
Ho appena capito questo la scorsa notte, per Capistrano si dovrebbe usare San_Juan , poi mi piace l'uso di Dio per gestire la distribuzione dei lavoratori. Come per sopravvivere un riavvio, non sono sicuro, ma che riavvio ogni 6 mesi, quindi non sono troppo preoccupato.
Anche se suggerire diversi modi di partenza, questo è ciò che ha funzionato più facile per me. (All'interno del vostro deploy.rb)
require 'san_juan'
after "deploy:symlink", "god:app:reload"
after "deploy:symlink", "god:app:start"
Per gestire in cui viene eseguito, su un altro server, ecc, si copre che nel href="https://github.com/resque/resque#configuration" rel="nofollow noreferrer"> sezione di configurazione del README
.
Io uso passeggeri sul mio fetta, quindi è stato relativamente facile, ho solo bisogno di avere un file config.ru
in questo modo:
require 'resque/server'
run Rack::URLMap.new \
"/" => Resque::Server.new
Per il mio file di VirtualHost ho:
<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>
Inoltre, una breve nota. Assicurati di overide il compito resque:setup
rastrello, ti farà risparmiare un sacco di tempo per la deposizione delle uova nuovi lavoratori con Dio.
Mi sono imbattuto in un sacco di problemi, quindi se avete bisogno di ulteriore aiuto, basta inserire un commento.
Utilizzare questi passaggi invece di fare configurazione con livello di server web e la modifica plugin:
#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