title: unicorn, capistrano install
body: <p>I have the following <strong>deploy.rb</strong></p>
  
  <pre><code># RVM bootstrap
  # $:.unshift(File.expand_path("/home/tim/.rvm/lib"))
  $:.unshift(File.expand_path('./lib', ENV['rvm_path']))
  require 'rvm/capistrano'
  set :rvm_ruby_string, '1.9.2'
  set :rvm_type, :user
  
  # bundler bootstrap
  require 'bundler/capistrano'
  
  # main details
  set :application, "polco"
  role :web, "13.213.13.94"
  role :app, "13.213.13.94"
  role :db, "13.213.13.94", :primary =&gt; true
  set :rails_env, "production"
  
  default_run_options[:pty] = true
  ssh_options[:forward_agent] = true
  set :deploy_to, "/home/passenger/cba"
  set :deploy_via, :remote_cache
  set :user, "passenger"
  set :use_sudo, false
  
  # repo details
  set :scm, :git
  set :scm_username, "tbbooher"
  set :repository, "git@github.com:tbbooher/foo.git"
  set :branch, "master"
  set :git_enable_submodules, 1
  set :keep_releases, 5
  
  # # server details
  set :unicorn_pid, "#{shared_path}/pids/unicorn.pid"
  
  after "deploy", "deploy:cleanup"
  
  namespace :unicorn do
    desc "start unicorn"
    task :start, :roles =&gt; :app, :except =&gt; {:no_release =&gt; true} do
      run "cd #{current_path} &amp;&amp; bundle exec unicorn_exec start"
    end
    desc "stop unicorn"
    task :stop, :roles =&gt; :app, :except =&gt; {:no_release =&gt; true} do
      run "#{current_path}/bundle exec unicorn_exec stop"
    end
    desc "unicorn reload"
    task :reload, :roles =&gt; :app, :except =&gt; {:no_release =&gt; true} do
      run "#{current_path}/bundle exec unicorn_exec reload"
    end
    desc "graceful stop unicorn"
    task :graceful_stop, :roles =&gt; :app, :except =&gt; {:no_release =&gt; true} do
      run "#{try_sudo} kill -s QUIT `cat #{unicorn_pid}`"
    end
    desc "restart unicorn"
    task :restart, :roles =&gt; :app, :except =&gt; {:no_release =&gt; true} do
      run "#{current_path}/bundle exec ./unicorn_exec restart"
    end
  
    after "deploy:restart", "unicorn:restart"
  end
  
  after "deploy:update_code", "deploy:config_symlink"
  # hope this works
  before "deploy:restart", "deploy:fix_file_permissions"
  
  namespace :deploy do
  
    task :config_symlink do
      run "ln -s #{shared_path}/application.yml #{release_path}/config/application.yml"
      run "ln -s #{shared_path}/mongoid.yml #{release_path}/config/mongoid.yml"
      run "ln -s #{shared_path}/mailserver_setting.rb #{release_path}/config/mailserver_setting.rb"
      run "ln -s #{shared_path}/omniauth_settings.rb #{release_path}/config/omniauth_settings.rb"
    end
  
    desc "Fix file permissions"
    task :fix_file_permissions do
      run "chmod a+x #{current_path}/unicorn_exec"
    end
  end
  
  namespace :deploy do
    task :restart do
    end
  end
  </code></pre>
  
  <p>and the following bash script, <strong>%rails_root%unicorn_exec</strong></p>
  
  <pre><code>#! /bin/sh
  
  ### BEGIN INIT INFO
  # Provides:          unicorn
  # Required-Start:    $local_fs $remote_fs $network $syslog
  # Required-Stop:     $local_fs $remote_fs $network $syslog
  # Default-Start:     2 3 4 5
  # Default-Stop:      0 1 6
  # Short-Description: starts the unicorn web server
  # Description:       starts unicorn
  ### END INIT INFO
  
  PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  DAEMON=/home/passenger/.rvm/gems/ruby-1.9.2-p180/bin/unicorn_rails
  DAEMON_OPTS="-c /home/passenger/cba/current/config/unicorn_tacitus.rb -E production -D"
  
  
  NAME=unicorn_rails
  DESC=unicorn_rails
  PID=/home/passenger/cba/shared/pids/unicorn.pid
  
  case "$1" in
    start)
      echo -n "Starting $DESC: "
      $DAEMON $DAEMON_OPTS
      echo "$NAME."
      ;;
    stop)
      echo -n "Stopping $DESC: "
          kill -QUIT `cat $PID`
      echo "$NAME."
      ;;
    restart)
      echo -n "Restarting $DESC: "
          kill -QUIT `cat $PID`
      sleep 1
      $DAEMON $DAEMON_OPTS
      echo "$NAME."
      ;;
    reload)
          echo -n "Reloading $DESC configuration: "
          kill -HUP `cat $PID`
          echo "$NAME."
          ;;
    *)
      echo "Usage: $NAME {start|stop|restart|reload}" &gt;&amp;2
      exit 1
      ;;
  esac
  
  exit 0
  </code></pre>
  
  <p>Which uses the following config: <strong>config/unicorn_tacitus.rb</strong></p>
  
  <pre><code>worker_processes 2
  base_dir = "/home/passenger/cba/current"
  shared_path = "/home/passenger/cba/shared"
  working_directory base_dir
  
  preload_app true
  
  # we destroy all workers who are taking too long
  timeout 30
  
  # This is where we specify the socket.
  # We will point the upstream Nginx module to this socket later on
  listen "/tmp/sockets/unicorn.sock", :backlog =&gt; 64
  
  pid "#{shared_path}/pids/unicorn.pid"
  
  # Set the path of the log files inside the log folder of the testapp
  stderr_path "#{shared_path}/log/unicorn.stderr.log"
  stdout_path "#{shared_path}/log/unicorn.stdout.log"
  
  before_fork do |server, worker|
  # This option works in together with preload_app true setting
  # What is does is prevent the master process from holding
  # the database connection
    defined?(ActiveRecord::Base) and
      ActiveRecord::Base.connection.disconnect!
  end
  
  after_fork do |server, worker|
  # Here we are establishing the connection after forking worker
  # processes
    defined?(ActiveRecord::Base) and
      ActiveRecord::Base.establish_connection
  end
  </code></pre>
  
  <p>I'm getting the error below on cap deploy. How should I be calling unicorn_exec to restart? It looks like bundle exec doesn't run. In general, I'm looking for feedback on my whole process, since I am new to mongodb, unicorn and nginx and sure there is at least one thing I am doing non-optimally.</p>
  
  <pre><code>executing "/home/passenger/cba/current/bundle exec ./unicorn_exec restart"
      servers: ["16.213.39.23"]
      [16.213.39.23] executing command
   ** [out :: 16.213.39.23] bash: /home/passenger/cba/current/bundle: No such file or directory
      command finished in 613ms
  failed: "rvm_path=$HOME/.rvm/ $HOME/.rvm/bin/rvm-shell '1.9.2' -c '/home/passenger/cba/current/bundle exec ./unicorn_exec restart'" on 16.223.39.23
  </code></pre>