Path issues when using Capistrano

I recently started using Capistrano on a personal project, which is hosted on a relatively plain Ubuntu box.

Capistrano wouldn’t do much, I kept getting errors about “bundle” not being found. Seems the newer versions of Rails and Capistrano prefix everything with “bundle” so the right Gems etc. are used.

Turns out there’s a problem with the path that my Capistrano scripts get when they ssh into the Linux machine. Seems there’s a different environment for interactive SSH sessions, and the non-interactive SSH sessions that Capistrano uses.

To diagnose this, I added this to my deploy.rb:


desc "Echo environment vars"
namespace :env do
task :echo do
run "echo printing out cap info on remote server"
run "echo $PATH"
run "printenv"
end
end

Which when I do cap env:echo tells me the path that my Capistrano scripts see – which crucially doesn’t include /var/lib/gems/1.8/bin.

Turns out you set the environment in ~/.ssh/environment, adding a PATH line in the normal way.

But then you need to edit /etc/ssh/sshd_config and add a line

PermitUserEnvironment yes

And restart SSH.

After that your Cap deployments will be smooth…