Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

Trying to get rails app deployed. Everything is installed nginx, unicorn, setup.

Error Im getting:

    [109.etc] env RAILS_ENV=production sh -c 'kill -s USR2 '\''cat /tmp/unicorn.pid'\'''
    sh: line 0: kill: cat /tmp/unicorn.pid: arguments must be process or job IDs

How can this be fixed? Ive searched for an hour an read into many docs and blogposts, still not found the solution.

deploy.rb

# config/deploy.rb
require "bundler/capistrano"

set :scm,             :git
set :repository,      "root@109.etc:/srv/paintings.git"
set :branch,          "origin/master"
set :migrate_target,  :current
set :ssh_options,     { :forward_agent => true }
set :rails_env,       "production"
set :deploy_to,       "/srv/paintings"
set :normalize_asset_timestamps, false

set :user,            "root"
set :group,           ""
set :use_sudo,        true
default_run_options[:pty] = true


role :web,    "109.etc"
role :app,    "109.etc"
role :db,     "109.etc", :primary => true

set(:latest_release)  { fetch(:current_path) }
set(:release_path)    { fetch(:current_path) }
set(:current_release) { fetch(:current_path) }

set(:current_revision)  { capture("cd #{current_path}; git rev-parse --short HEAD").strip }
set(:latest_revision)   { capture("cd #{current_path}; git rev-parse --short HEAD").strip }
set(:previous_revision) { capture("cd #{current_path}; git rev-parse --short HEAD@{1}").strip }

default_environment["RAILS_ENV"] = 'production'

#default_environment["PATH"]         = "/bin/bash"
#default_environment["GEM_HOME"]     = "/usr/local/rvm/gems/ruby-1.9.3-p125"
#default_environment["GEM_PATH"]     = "/usr/local/rvm/gems/ruby-1.9.3-p125"
#default_environment["RUBY_VERSION"] = "ruby 1.9.3p125"
#default_run_options[:shell] = 'bash'

namespace :deploy do
  desc "Deploy your application"
  task :default do
    update
    restart
  end

  desc "Setup your git-based deployment app"
  task :setup, :except => { :no_release => true } do
    dirs = [deploy_to, shared_path]
    dirs += shared_children.map { |d| File.join(shared_path, d) }
    run "#{try_sudo} mkdir -p #{dirs.join(' ')} && #{try_sudo} chmod g+w #{dirs.join(' ')}"
    run "git clone #{repository} #{current_path}"
  end

  task :cold do
    update
    migrate
  end

  task :update do
    transaction do
      update_code
    end
  end

  desc "Update the deployed code."
  task :update_code, :except => { :no_release => true } do
    run "cd #{current_path}; git fetch origin; git reset --hard #{branch}"
    finalize_update
  end

  desc "Update the database (overwritten to avoid symlink)"
  task :migrations do
    transaction do
      update_code
    end
    migrate
    restart
  end

  task :finalize_update, :except => { :no_release => true } do
    run "chmod -R g+w #{latest_release}" if fetch(:group_writable, true)

    # mkdir -p is making sure that the directories are there for some SCM's that don't
    # save empty folders
    run <<-CMD
      rm -rf #{latest_release}/log #{latest_release}/public/system #{latest_release}/tmp/pids &&
      mkdir -p #{latest_release}/public &&
      mkdir -p #{latest_release}/tmp &&
      ln -s #{shared_path}/log #{latest_release}/log &&
      ln -s #{shared_path}/system #{latest_release}/public/system &&
      ln -s #{shared_path}/pids #{latest_release}/tmp/pids &&
      ln -sf #{shared_path}/database.yml #{latest_release}/config/database.yml
    CMD

    if fetch(:normalize_asset_timestamps, true)
      stamp = Time.now.utc.strftime("%Y%m%d%H%M.%S")
      asset_paths = fetch(:public_children, %w(images stylesheets javascripts)).map { |p| "#{latest_release}/public/#{p}" }.join(" ")
      run "find #{asset_paths} -exec touch -t #{stamp} {} ';'; true", :env => { "TZ" => "UTC" }
    end
  end

  desc "Zero-downtime restart of Unicorn"
  task :restart, :except => { :no_release => true } do
    run "kill -s USR2 `cat /srv/paintings/shared/pids/unicorn.pid`"
  end

  desc "Start unicorn"
  task :start, :except => { :no_release => true } do
    run "cd #{current_path} ; bundle exec unicorn_rails -c config/unicorn.rb -D"
  end

  desc "Stop unicorn"
  task :stop, :except => { :no_release => true } do
    run "kill -s QUIT `cat /srv/paintings/shared/pids/unicorn.pid`"
  end  

  namespace :rollback do
    desc "Moves the repo back to the previous version of HEAD"
    task :repo, :except => { :no_release => true } do
      set :branch, "HEAD@{1}"
      deploy.default
    end

    desc "Rewrite reflog so HEAD@{1} will continue to point to at the next previous release."
    task :cleanup, :except => { :no_release => true } do
      run "cd #{current_path}; git reflog delete --rewrite HEAD@{1}; git reflog delete --rewrite HEAD@{1}"
    end

    desc "Rolls back to the previously deployed version."
    task :default do
      rollback.repo
      rollback.cleanup
    end
  end
end

def run_rake(cmd)
  run "cd #{current_path}; #{rake} #{cmd}"
end

UPDATE

When running the unicorn start command from the server :

bundle exec unicorn_rails -c config/unicorn.rb -D
/usr/local/rvm/gems/ruby-1.9.3-p125/gems/bundler-1.1.1/lib/bundler.rb:255: warning: Insecure world writable dir /srv in PATH, mode 040777

My permissions for /srv/ drwxr--r-- 4 root root 4096 Mar 15 19:14 srv * not sure if those are right

share|improve this question
add comment

1 Answer 1

up vote 1 down vote accepted

unicorn_rails -E production -c $APP_PATH/config/unicorn.rb -D should be all you need. So looking at your code, you are missing your env flag (-E) if you have to use bundle that way.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.