Unicorn es un servidor de aplicaciones para Rails, que a diferencia de otros, y a pesar que Rails aún no sea tread-safe, soporta concurrencia, al iniciar varios procesos simultáneamente por cada dyno de Heroku, por lo que es el servidor recomendado para este PaaS >>

gema

Para usarlo, hay que añadirlo al Gemfile

gem 'unicorn'

por supuesto correr después

$ bundle install

config

Además hay que poner un archivo de configuración en config/unicorn.rb >>

worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
timeout 15
preload_app true

before_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end

para el detalle refiérase a la documentación…
Pero en resumen estás indicando el número de procesos por dyno (se puede entre 2 y 4, acá se usa una variable, o 3) >>, precargando la aplicación para que esté disponible en cada proceso >>, y especificándole qué hacer para iniciarse y terminarse >>
En particular, en lo que respecta a las conexiones a la base de datos, y cómo traducir una señal a cada uno de los procesos.
Por ejemplo, si digo terminar el servidor, éste tiene que ir a hacerlo a cada uno de sus procesos.

Procfile

Pero sobre todo, tienes que especificar que estás usando Unicorn, lo cual no queda tan claro en la documentación, y lo que motivó este post.

Para ésto creas un archivo llamado Procfile en la raíz de tu aplicación, que rece así

web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb

es decir, defines web como unicorn, le pasas el puerto, y como configuración el archivo de arriba.

Éso era.

Este sitio utiliza cookies.    Leer más