Cómo implementar los trabajadores resque en la producción?
-
20-09-2019 - |
Pregunta
Los chicos de GitHub liberados recientemente su aplicación para el proceso de fondo que utiliza Redis: http://github.com/defunkt/resque http://github.com/blog/542-introducing-resque
Tengo que trabajar localmente, pero estoy luchando para conseguir que funcione en la producción. Tiene a nadie a:
- Capistrano receta para desplegar trabajadores (Número de control de los trabajadores, el reinicio de ellos, etc)
- trabajadores desplazados a máquina separada (s) desde donde se está ejecutando la aplicación principal, lo que los ajustes se necesita aquí?
- Redis conseguido sobrevivir a un reinicio del servidor (He intentado poner en cron, pero sin suerte)
- ¿Cómo trabajó resque web (su excelente aplicación de supervisión) en su despliegue?
Gracias!
P.S. He publicado un problema en Github sobre esto, pero no hay respuesta todavía. Con la esperanza de algunos gurús SO puede ayudar en este caso, ya que no tengo mucha experiencia en implementaciones. Gracias!
Solución 3
La respuesta de Garrett ayudó mucho, sólo quería publicar algunos detalles más. Se tomó una gran cantidad de retoques para hacerlo bien ...
Estoy usando pasajeros también, pero nginx en lugar de Apache.
En primer lugar, no olvide que usted necesita instalar Sinatra, esto me tiró por un tiempo.
sudo gem install sinatra
Luego hay que hacer un directorio para el que hay que ejecutar, y tiene que tener una carpeta pública y tmp. Pueden ser vacío pero el problema es que git no guardará un directorio vacío en el repositorio. El directorio tiene que tener al menos un archivo en el mismo, así que hice algunos archivos basura como marcadores de posición. Esta es una característica extraña / error en git.
Estoy usando el plugin resque, por lo que hizo el directorio allí (en el que el defecto es config.ru). Parece que Garrett hizo un nuevo directorio 'resque' en su RAILS_ROOT. Cualquiera de los dos debería funcionar. Para mí ...
cd MY_RAILS_APP/vendor/plugins/resque/
mkdir public
mkdir tmp
touch public/placeholder.txt
touch tmp/placeholder.txt
A continuación, he editado MY_RAILS_APP/vendor/plugins/resque/config.ru
por lo que se ve así:
#!/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
No se olvide de cambiar ADD_SOME_PASSWORD_HERE
a la contraseña que desea utilizar para proteger la aplicación.
Por último, estoy usando Nginx Así que aquí es lo que he añadido a mi nginx.conf
server {
listen 80;
server_name resque.seoaholic.com;
root /home/admin/public_html/seoaholic/current/vendor/plugins/resque/public;
passenger_enabled on;
}
Y así se reinicia en sus despliega, probablemente algo como esto en su deploy.rb
run "touch #{current_path}/vendor/plugins/resque/tmp/restart.txt"
No estoy muy seguro de si se trata de la mejor manera, nunca he bastidor configuración / aplicaciones Sinatra antes. Pero funciona.
Esto es sólo para obtener la aplicación de monitoreo de ir. A continuación, tengo que averiguar la parte dios.
Otros consejos
Estoy un poco tarde a la fiesta, pero pensé que había puesto lo que funcionó para mí. Esencialmente, he fijado dios para controlar Redis y resque. Si no se están ejecutando ya, Dios los comienza a subir. Entonces, tengo una tarea rake que se ejecute después de un despliegue Capistrano que sale de mis trabajadores resque. Una vez que los trabajadores se dejan, dios comenzará a nuevos trabajadores para que estén ejecutando la última base de código.
Aquí está mi valoración crítica completa de cómo uso en la producción resque:
Yo sólo di cuenta de esto la noche anterior, para Capistrano se debe utilizar san_juan , entonces me gusta el uso de Dios para administrar la implementación de los trabajadores. En cuanto a sobrevivir a un reinicio, no estoy seguro, pero reanudo cada 6 meses así que no estoy demasiado preocupado.
A pesar de que sugieren diferentes formas de ponerlo en marcha, esto es lo que funcionó más fácil para mí. (Dentro de su deploy.rb)
require 'san_juan'
after "deploy:symlink", "god:app:reload"
after "deploy:symlink", "god:app:start"
Para gestionar cuando se ejecuta, en otro servidor, etc, que cubre que en el href="https://github.com/resque/resque#configuration" rel="nofollow noreferrer"> sección de la README
.
Yo uso de pasajeros en mi corte, por lo que fue relativamente fácil, sólo es necesario tener un archivo config.ru
este modo:
require 'resque/server'
run Rack::URLMap.new \
"/" => Resque::Server.new
Para mi archivo de host virtual que tengo:
<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>
Además, una nota rápida. Asegúrese de que la tarea overide resque:setup
rastrillo, que le ahorrará un montón de tiempo para el desove nuevos trabajadores con Dios.
Me encontré con un montón de problemas, por lo que si necesita más ayuda, simplemente enviar un comentario.
Utilice estos pasos en lugar de hacer la configuración de nivel de servidor web y plug-in de edición:
#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