Use unicorn in Docker container

dockerfile-tweaks
Marcin Kulik 7 years ago
parent 4a6f6cb7ca
commit c5730d914d

@ -0,0 +1,55 @@
ASCIINEMA_HOME = ENV["ASCIINEMA_HOME"] || Dir.pwd
UNICORN_WORKERS = (ENV["UNICORN_WORKERS"] || "4").to_i
# Use at least one worker per core if you're on a dedicated server,
# more will usually help for _short_ waits on databases/caches.
worker_processes UNICORN_WORKERS
# Help ensure your application will always spawn in the symlinked
# "current" directory that Capistrano sets up.
working_directory ASCIINEMA_HOME
listen 3000, :tcp_nopush => true
# nuke workers after 60 seconds
timeout 60
# feel free to point this anywhere accessible on the filesystem
pid "#{ASCIINEMA_HOME}/tmp/unicorn.pid"
preload_app true
# Enable this flag to have unicorn test client connections by writing the
# beginning of the HTTP headers before calling the application. This
# prevents calling the application for connections that have disconnected
# while queued. This is only guaranteed to detect clients on the same
# host unicorn runs on, and unlikely to detect disconnects even on a
# fast LAN.
check_client_connection false
before_exec do |server|
ENV["BUNDLE_GEMFILE"] = "#{ASCIINEMA_HOME}/Gemfile"
end
before_fork do |server, worker|
if defined?(ActiveRecord::Base)
ActiveRecord::Base.connection.disconnect!
Rails.logger.info('Disconnected from ActiveRecord')
end
old_pid = "#{server.config[:pid]}.oldbin"
if old_pid != server.pid
begin
sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
Process.kill(sig, File.read(old_pid).to_i)
rescue Errno::ENOENT, Errno::ESRCH
end
end
end
after_fork do |server, worker|
if defined?(ActiveRecord::Base)
ActiveRecord::Base.establish_connection
Rails.logger.info('Connected to ActiveRecord')
end
end

@ -6,6 +6,6 @@ command=/usr/sbin/nginx -g "daemon off;"
redirect_stderr=true
[program:rails]
command=bundle exec rails server
command=bundle exec unicorn -p 3000 -c config/unicorn.rb
redirect_stderr=true
directory=/app
Loading…
Cancel
Save