|  | # RAILS_ROOT/config/unicorn.rb | 
        
          |  | # Search for "# SET ME!" and replace these with your own settings!. | 
        
          |  |  | 
        
          |  | # Set environment to development unless something else is specified | 
        
          |  | env = ENV["RAILS_ENV"] || "development" | 
        
          |  | RAILS_ROOT = # SET ME! | 
        
          |  |  | 
        
          |  | if ENV['MY_RUBY_HOME'] && ENV['MY_RUBY_HOME'].include?('rvm') | 
        
          |  | begin | 
        
          |  | rvm_path = File.dirname(File.dirname(ENV['MY_RUBY_HOME'])) | 
        
          |  | rvm_lib_path = File.join(rvm_path, 'lib') | 
        
          |  | $LOAD_PATH.unshift rvm_lib_path | 
        
          |  | require 'rvm' | 
        
          |  | RVM.use_from_path! RAILS_ROOT | 
        
          |  | rescue LoadError | 
        
          |  | raise "RVM ruby lib is currently unavailable." | 
        
          |  | end | 
        
          |  | end | 
        
          |  |  | 
        
          |  | ENV['BUNDLE_GEMFILE'] = File.expand_path('../Gemfile', File.dirname(__FILE__)) | 
        
          |  | require 'bundler/setup' | 
        
          |  |  | 
        
          |  | pid "#{RAILS_ROOT}/tmp/pids/unicorn.pid" | 
        
          |  |  | 
        
          |  | # See http://unicorn.bogomips.org/Unicorn/Configurator.html for complete | 
        
          |  | # documentation. | 
        
          |  | worker_processes 10 # SET ME! | 
        
          |  |  | 
        
          |  | # listen on both a Unix domain socket and a TCP port, | 
        
          |  | # we use a shorter backlog for quicker failover when busy | 
        
          |  | listen "/tmp/APPNAME.sock", :backlog => 1024 # SET ME! | 
        
          |  |  | 
        
          |  | # Preload our app for more speed | 
        
          |  | preload_app true | 
        
          |  |  | 
        
          |  | GC.respond_to?(:copy_on_write_friendly=) and | 
        
          |  | GC.copy_on_write_friendly = true | 
        
          |  |  | 
        
          |  | # nuke workers after 30 seconds instead of 60 seconds (the default) | 
        
          |  | timeout 60 | 
        
          |  |  | 
        
          |  | # Production specific settings | 
        
          |  | if env == "production" | 
        
          |  | # Help ensure your application will always spawn in the symlinked | 
        
          |  | # "current" directory that Capistrano sets up. | 
        
          |  | working_directory RAILS_ROOT | 
        
          |  |  | 
        
          |  | # feel free to point this anywhere accessible on the filesystem | 
        
          |  | user 'deployer', 'staff' | 
        
          |  | shared_path = # SET ME! | 
        
          |  |  | 
        
          |  | stderr_path "#{shared_path}/log/unicorn.stderr.log" | 
        
          |  | stdout_path "#{shared_path}/log/unicorn.stdout.log" | 
        
          |  | end | 
        
          |  |  | 
        
          |  | before_fork do |server, worker| | 
        
          |  | # the following is highly recomended for Rails + "preload_app true" | 
        
          |  | # as there's no need for the master process to hold a connection | 
        
          |  | if defined?(ActiveRecord::Base) | 
        
          |  | ActiveRecord::Base.connection.disconnect! | 
        
          |  | end | 
        
          |  |  | 
        
          |  | # Before forking, kill the master process that belongs to the .oldbin PID. | 
        
          |  | # This enables 0 downtime deploys. | 
        
          |  | old_pid = "#{RAILS_ROOT}/tmp/pids/unicorn.pid.oldbin" | 
        
          |  | if File.exists?(old_pid) && server.pid != old_pid | 
        
          |  | begin | 
        
          |  | Process.kill("QUIT", File.read(old_pid).to_i) | 
        
          |  | rescue Errno::ENOENT, Errno::ESRCH | 
        
          |  | # someone else did our job for us | 
        
          |  | end | 
        
          |  | end | 
        
          |  | end | 
        
          |  |  | 
        
          |  | after_fork do |server, worker| | 
        
          |  | # the following is *required* for Rails + "preload_app true", | 
        
          |  | if defined?(ActiveRecord::Base) | 
        
          |  | ActiveRecord::Base.establish_connection | 
        
          |  | end | 
        
          |  |  | 
        
          |  | # if preload_app is true, then you may also want to check and | 
        
          |  | # restart any other shared sockets/descriptors such as Memcached, | 
        
          |  | # and Redis.  TokyoCabinet file handles are safe to reuse | 
        
          |  | # between any number of forked children (assuming your kernel | 
        
          |  | # correctly implements pread()/pwrite() system calls) | 
        
          |  | end |