Awhile ago i create a capistrano-unicorn plugin for Capistrano that allows you to deploy your rails application using Unicorn. It works fine until you define multiple stages in your deployment configuration.
The issue – capistrano loads default configuration and then executes your staging task and overrides previously defined variables. Default environment before executing stage task is set to :production. So unless you define :rails_env, :unicorn_env, :app_env in your stage config it will use a wrong environment.
Lets take a look at sample deploy.rb file:
set :stages, %w(production staging) set :default_stage, "staging" require 'capistrano/ext/multistage'
You’ll need to add config/deploy/staging.rb and production.rb files:
set :domain, "YOUR_HOST" set :rails_env, "staging" set :unicorn_env, "staging" set :app_env, "staging" role :web, domain role :app, domain role :db, domain, :primary => true set :deploy_to, "/home/#{user}/#{application}/#{fetch :app_env}" set :current_path, File.join(deploy_to, current_dir)
This should fix the problem with wrong rails env being passed to unicorn server.