I want to use capistrano 3 to deploy my web-application on my vps. Unfortunately, I get some errors:
DEBUG [6de1d411] Running [ -L /var/www/myapp/releases/20160405125654/log ] as [email protected]
DEBUG [6de1d411] Command: [ -L /var/www/myapp/releases/20160405125654/log ]
DEBUG [6de1d411] Finished in 0.005 seconds with exit status 0 (successful).
DEBUG [cf28b01d] Running [ -L /var/www/myapp/releases/20160405125654/tmp/pids ] as [email protected]
DEBUG [cf28b01d] Command: [ -L /var/www/myapp/releases/20160405125654/tmp/pids ]
DEBUG [cf28b01d] Finished in 0.005 seconds with exit status 1 (failed).
DEBUG [c7f0b156] Running [ -d /var/www/myapp/releases/20160405125654/tmp/pids ] as [email protected]
DEBUG [c7f0b156] Command: [ -d /var/www/myapp/releases/20160405125654/tmp/pids ]
DEBUG [c7f0b156] Finished in 0.005 seconds with exit status 1 (failed).
As far I read, these failed test are ok, since it only checks existence of symlinks and directories. But the following is somehow the game-breaker:
INFO [c1b0c10e] Finished in 0.007 seconds with exit status 0 (successful).
INFO [e895fd13] Running /usr/bin/env sudo /etc/init.d/nginx reload as [email protected]
DEBUG [e895fd13] Command: ( export RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="2.2.3" ; /usr/bin/env sudo /etc/init.d/nginx reload )
DEBUG [e895fd13] Reloading nginx configuration (via systemctl): nginx.service
DEBUG [e895fd13] .
INFO [e895fd13] Finished in 0.037 seconds with exit status 0 (successful).
INFO [1a822f12] Running /usr/bin/env service unicorn_myapp_production restart as [email protected]
DEBUG [1a822f12] Command: ( export RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="2.2.3" ; /usr/bin/env service unicorn_myapp_production restart )
DEBUG [1a822f12] /usr/bin/env: service
DEBUG [1a822f12] : No such file or directory
(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as [email protected]: service exit status: 127
service stdout: Nothing written
service stderr: /usr/bin/env: service: No such file or directory
Obviously, Debian jessie relies on systemctl
instead of service
, since
/usr/bin/env service
does really not exists. No, I want to overwrite the default behaviour by adding
namespace :unicorn do
task :defaults do
on roles :app do
set :unicorn_user, fetch(:unicorn_user, deploy_user)
end
end
desc 'Setup Unicorn initializer'
task :setup_initializer do
on roles :app do
next if file_exists? unicorn_initd_file
sudo_upload! template('unicorn_init.erb'), unicorn_initd_file
execute :chmod, '+x', unicorn_initd_file
sudo 'update-rc.d', '-f', fetch(:unicorn_service), 'defaults'
end
end
desc 'Setup Unicorn app configuration'
task :setup_app_config do
on roles :app do
next if file_exists? fetch(:unicorn_config)
execute :mkdir, '-pv', File.dirname(fetch(:unicorn_config))
upload! template('unicorn.rb.erb'), fetch(:unicorn_config)
end
end
%w[start stop restart].each do |command|
desc "#{command} unicorn"
task command do
on roles :app do
# execute :service, fetch(:unicorn_service), command
# run "#{sudo} systemctl #{command} unicorn_#{application}"
sudo "/etc/init.d/unicorn_#{fetch(:unicorn_service)} #{command}"
end
end
end
before :setup_initializer, :defaults
end
to /myapp/config/deploy.rb
. But capistrano ignores this settings. So how can I ensure, that a Debian-8-specific config is loaded.
I'm not familiar with unicorn, but I assume you're using something which is defining the cap tasks, which you're then trying to override? If that's the case, with Capistrano 3 you'd need to clear the original task before you redefine it. What you're doing currently extends the tasks. You'd need to use Rake::Task["task_name"].clear
something like this:
namespace :unicorn do
%w[start stop restart].each do |command|
Rake::Task["unicorn:#{command}"].clear
desc "#{command} unicorn"
task command do
on roles :app do
# execute :service, fetch(:unicorn_service), command
# run "#{sudo} systemctl #{command} unicorn_#{application}"
sudo "/etc/init.d/unicorn_#{fetch(:unicorn_service)} #{command}"
end
end
end
end