Reputation: 15491
Im trying to deploy a simple application with capistrano nginx and unicorn
/srv/paintings.git ( initiated and pushed repo )
/srv/paintings ( place where app should be installed )
My deploy.rb looks like
# config/deploy.rb
require "bundler/capistrano"
set :scm, :git
set :repository, "[email protected]: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, "rvm"
set :use_sudo, true
role :web, "109.0.0.0.05"
role :app, "109.0.0.0.05"
role :db, "109.0.0.0.05", :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_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 /tmp/unicorn.my_site.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 /tmp/unicorn.my_site.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
Log output: *when doing a cap:setup*
[109.etc] env RAILS_ENV=production sh -c 'git clone [email protected]:srv/paintings.git /srv/paintings/current'
** [out :: 109.etc] Initialized empty Git repository in /srv/paintings/current/.git/
** [out :: 109.etc] The authenticity of host '109.etc (109.etc)' can't be established.
** [out :: 109.etc] RSA key fingerprint is e9:af etc.
** [out :: 109.etc] Are you sure you want to continue connecting (yes/no)?
Typing Yes keeps me waiting forever with no status updates
Upvotes: 0
Views: 1935
Reputation: 2747
I got a similar error once when I told Capistrano to connect to a ssh server which I have never before connected to. Have you tried connecting to the sever (with the same user, ie. root
and not git
) simply with ssh [email protected]
?
It'll probably ask you again if you want to trust the server. If that is the case, my guess is that Capistrano does not react to your 'yes' input.
Also, you connect to your server as root. That means you should not need to have use_sudo
set to true
.
Upvotes: 1
Reputation: 33217
do not use default_environment["PATH"] = "--"
or provide a full path to bash
somehow (usually /bin/bash
)
Upvotes: 1