stable software rails official latest and ruby-on-rails capistrano delayed-job redis resque

ruby on rails - software - ¿Cómo implementar a los trabajadores de resque en la producción?



ruby on rails software (4)

Los chicos de GitHub recientemente lanzaron su aplicación de procesamiento en segundo plano que usa Redis: http://github.com/defunkt/resque http://github.com/blog/542-introducing-resque

Lo tengo trabajando localmente, pero estoy luchando para que funcione en producción. Alguien tiene un:

  1. Receta de Capistrano para desplegar trabajadores (controlar el número de trabajadores, reiniciarlos, etc.)
  2. Despliegue a los trabajadores para separar las máquinas de donde se ejecuta la aplicación principal, ¿qué ajustes se necesitaban aquí?
  3. get redis para sobrevivir a un reinicio en el servidor (traté de ponerlo en cron pero no tuve suerte)
  4. ¿Cómo trabajaste resque-web (su excelente aplicación de monitoreo) en tu implementación?

¡Gracias!

PD. Publiqué un problema en Github sobre esto pero aún no recibí respuesta. Esperar que algunos gurús de SO puedan ayudar con este ya que no tengo mucha experiencia en implementaciones. ¡Gracias!


La respuesta de Garrett realmente ayudó, solo quería publicar algunos detalles más. Me tomó un montón de retoques para hacerlo bien ...

También uso pasajero, pero nginx en lugar de apache.

Primero, no olvides que necesitas instalar sinatra, esto me tiró por un tiempo. sudo gem install sinatra

Luego necesita hacer un directorio para que se ejecute, y tiene que tener una carpeta pública y tmp. Pueden estar vacíos, pero el problema es que git no guardará un directorio vacío en el repositorio. El directorio debe tener al menos un archivo, por lo que hice algunos archivos basura como marcadores de posición. Esta es una característica / error extraño en git.

Estoy usando el plugin resque, así que hice el directorio allí (donde está el config.ru predeterminado). Parece que Garrett hizo un nuevo directorio ''resque'' en su rails_root. Cualquiera de los dos debería funcionar. Para mi...

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

Luego MY_RAILS_APP/vendor/plugins/resque/config.ru para que se vea 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 olvides cambiar ADD_SOME_PASSWORD_HERE en la contraseña que deseas usar para proteger la aplicación.

Finalmente, estoy usando Nginx así que aquí está lo que agregué 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 despliegues, probablemente algo así en su deploy.rb

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

No estoy seguro de si esta es la mejor manera, nunca antes configuré aplicaciones rack / sinatra. Pero funciona.

Esto es solo para hacer funcionar la aplicación de monitoreo. Luego necesito descubrir la parte de dios.


Llego un poco tarde a la fiesta, pero pensé en publicar lo que funcionó para mí. Esencialmente, tengo la configuración de Dios para monitorear redis y resque. Si ya no se están ejecutando, Dios los inicia nuevamente. Luego, tengo una tarea de rake que se ejecuta después de un despliegue de capistrano que deja a mis trabajadores de resque. Una vez que los trabajadores renuncien, Dios iniciará la creación de nuevos trabajadores para que ejecuten la última base de código.

Aquí está mi descripción completa de cómo uso resque en la producción:

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


Me acabo de dar cuenta anoche, para Capistrano deberías usar san_juan , luego me gusta el uso de God para administrar el despliegue de los trabajadores. En cuanto a sobrevivir a un reinicio, no estoy seguro, pero reinicio cada 6 meses, así que no estoy demasiado preocupado.

A pesar de que sugiere diferentes formas de iniciarlo, esto es lo que me resultó más fácil. (Dentro de su deploy.rb)

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

Para administrar dónde se ejecuta, en otro servidor, etc., lo cubre en la sección de configuración del archivo README .

Uso Passenger en mi porción, así que fue relativamente fácil, solo necesitaba tener un archivo config.ru como ese:

require ''resque/server'' run Rack::URLMap.new / "/" => Resque::Server.new

Para mi archivo VirtualHost 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úrate de superar la resque:setup rake, te ahorrará mucho tiempo para generar nuevos trabajadores con Dios.

Me encontré con muchos problemas, así que si necesitas más ayuda, solo publica un comentario.


Utilice estos pasos en lugar de realizar la configuración con el nivel del servidor web y el plugin 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

https://gist.github.com/1060167