Hi There,
I am attempted to have Capistrano tasks only display the commands instead of executing them. I did this by basically using a function which determines if the command needs to be executed or printed based on a 'debug' flag passed as an argument which would be accessed as a environment variable, however I encountered some exceptions:
What I've done:
def execute_as cmd
if $debug.eql? 'true'
puts cmd
else
execute "#{cmd}"
end
The above works fine for all except for the following scenario:
# fails for any test command
if test(" [ ! -d /usr/backup ] ")
puts "+ Creating backup point /usr/backup.."
execute_as "sudo mkdir /usr/backup"
puts "#{$checkmark} Created /usr/backup"
end
The exception below is:
1. Only generated when it encounters the first test command.
2. Does not terminate. Prints all command successfully until the end.
DEBUG[ba34641c] Command: [ ! -d /usr/backup ]
Exception `Net::SSH::Exception' at /opt/ruby/ruby-2.0.0-p451/usr/lib64/ruby/gems/2.0.0/gems/net-ssh-2.9.1/lib/net/ssh/transport/algorithms.rb:329 - could not settle on language_client algorithm
Exception `Net::SSH::Exception' at /opt/ruby/ruby-2.0.0-p451/usr/lib64/ruby/gems/2.0.0/gems/net-ssh-2.9.1/lib/net/ssh/transport/algorithms.rb:329 - could not settle on language_server algorithm
Exception `Net::SSH::Authentication::DisallowedMethod' at /opt/ruby/ruby-2.0.0-p451/usr/lib64/ruby/gems/2.0.0/gems/net-ssh-2.9.1/lib/net/ssh/authentication/methods/none.rb:23 - Net::SSH::Authentication::DisallowedMethod
Exception `TypeError' at /opt/ruby/ruby-2.0.0-p451/usr/lib64/ruby/gems/2.0.0/gems/net-ssh-2.9.1/lib/net/ssh/authentication/agent/socket.rb:65 - no implicit conversion of nil into String
Exception `Net::SSH::Authentication::AgentNotAvailable' at /opt/ruby/ruby-2.0.0-p451/usr/lib64/ruby/gems/2.0.0/gems/net-ssh-2.9.1/lib/net/ssh/authentication/agent/socket.rb:68 - no implicit conversion of nil into String
I can SSH into the remote server successfully and if the debug option is off, no exceptions are generated.
A closer look led me to change the environment variable name (instead of using 'debug') which solved the problem.
I was hoping someone could explain this behavior?
Thanks.
Versions: