Reputation: 189
Like I wrote in the title Unicorn master process is lately (after deploy and restarting) is killing workers and starting new ones all the time and that is why my Rails app is not working at all. Besides that the CPU on the server is 100% during that. However if I make cap unicorn:stop everytning is being shutdown correctly but after cap unicorn:start it starts all over again.
unicorn.rb:
# Should be 'production' by default, otherwise use other env
rails_env = ENV['RAILS_ENV'] || 'production'
app_path = "/home/ruby/app/current"
listen 5000
# Spawn unicorn master worker for user ruby (group: www-data)
user 'ruby', 'ruby'
working_directory app_path
worker_processes 2
timeout 90
#preload_app true
# Log everything to one file
stderr_path "log/unicorn.log"
stdout_path "log/unicorn.log"
# Set master PID location
pid "#{app_path}/tmp/pids/unicorn.pid"
# To save some memory and improve performance
GC.respond_to?(:copy_on_write_friendly=) and GC.copy_on_write_friendly = true
# Force the bundler gemfile environment variable to
# reference the Сapistrano "current" symlink
before_exec do |_|
ENV["BUNDLE_GEMFILE"] = File.join(@app, 'Gemfile')
end
before_fork do |server, worker|
# Replace with MongoDB or whatever
if defined?(ActiveRecord::Base)
ActiveRecord::Base.connection.disconnect!
Rails.logger.info('Disconnected from ActiveRecord')
end
old_pid = "#{server.config[: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
sleep 1
end
after_fork do |server, worker|
# Replace with MongoDB or whatever
if defined?(ActiveRecord::Base)
ActiveRecord::Base.establish_connection
Rails.logger.info('Connected to ActiveRecord')
end
end
and my deploy.rb
require "bundler/capistrano"
require 'rvm/capistrano'
set :whenever_command, "bundle exec whenever"
require "whenever/capistrano"
set :default_shell, :bash
set :rvm_type, :system
set :rvm_ruby_string, '1.9.3-p194'
set(:rvm_path) { "/usr/local/rvm" }
set :application, "investwallet"
# main details
role :web, "example.com"
role :app, "example.com"
role :db, "example.com"
# server details
default_run_options[:pty] = true
set :deploy_to, "/home/ruby/app"
set :deploy_via, :remote_cache
set :user, "ruby"
set :use_sudo, false
set :port, 22
# repo details
set :scm, :git
set :scm_username, "git"
#set :scm_passphrase, "" # The deploy user's password
set :repository, "[email protected]:/opt/git/example.git"
set :branch, "master"
#set :git_enable_submodules, 1
set :keep_releases, 3
set(:releases_path) { File.join(deploy_to, version_dir) }
set(:shared_path) { File.join(deploy_to, shared_dir) }
set(:current_path) { File.join(deploy_to, current_dir) }
set(:release_path) { File.join(releases_path, release_name) }
default_environment["RAILS_ENV"] = 'production'
require 'capistrano-unicorn'
after 'deploy:update_code', 'deploy:symlink_db'
after 'deploy:update_code', 'deploy:symlink_letter_opener'
after "deploy:restart", "deploy:cleanup"
after 'deploy:restart', 'unicorn:reload' # app IS NOT preloaded
after 'deploy:restart', 'unicorn:restart' # app preloaded
namespace :deploy do
desc "Symlinks the database.yml"
task :symlink_db, :roles => :app do
run "ln -nfs #{deploy_to}/shared/config/database.yml # {release_path}/config/database.yml"
end
desc "Symlinks the tmp letter opener"
task :symlink_letter_opener, :roles => :app do
run "ln -nfs #{shared_path}/letter_opener/ #{release_path}/tmp/letter_opener"
end
end
namespace :unicorn do
desc "Restart Unicorn"
task :restart do
unicorn.stop
unicorn.start
end
end
Upvotes: 1
Views: 651
Reputation: 1213
try bundle install
the chances are you have included a gem and have not installed it.
Upvotes: 0