ssh to execute remote ruby script

B

Blake Miller

I'm using 'net/ssh' to ssh into a OS X server and run a ruby script,
like this:

Net::SSH.start( "xxx.xxx.xxx", :username => 'xxx', :password => 'xxx'
) do | session |
shell = session.shell.open
shell.exec "ruby /usr/local/pgsql/share/migrate.rb
#{params['host']}"
end

The migrate.rb looks like this:

require 'rubygems'
...some ruby code

For some reason, the script fails to execute anything after the require
'rubygems' line. If I remove that line, the script will run, but
obviously I cannot use any gems, which I need.

If I ssh via terminal to the server, I can run the script fine with:
ruby /usr/local/pgsql/share/migrate.rb 1

I can't figure out why, when ssh'ing via the net/ssh package, the remote
script cannot include rubygems.

Any ideas?
 
A

ara.t.howard

I can't figure out why, when ssh'ing via the net/ssh package, the
remote
script cannot include rubygems.

the remote machine has two rubys, one which has rubygems installed and
one without - when you ssh into a machine you may or may not have your
environment configured correctly and, thus, may or may not have your
'normal' PATH set. try your command with the full path to the ruby
you are expecting to use. note that any

system 'something'

may also fail if the PATH setting is indeed the cause.

this is a wild ass guess.

a @ http://codeforpeople.com/
 
C

Chiyuan Zhang

Maybe some environment variables is not set properly when logged in as
non-interactive session? It seems interactive shell and non-interactive
ones do not run the same bunch of start up scripts. like ~/.profile,
~/.bashrc , etc.

I'm using 'net/ssh' to ssh into a OS X server and run a ruby script,
like this:

Net::SSH.start( "xxx.xxx.xxx", :username => 'xxx', :password => 'xxx'
) do | session |
shell = session.shell.open
shell.exec "ruby /usr/local/pgsql/share/migrate.rb
#{params['host']}"
end

The migrate.rb looks like this:

require 'rubygems'
...some ruby code

For some reason, the script fails to execute anything after the require
'rubygems' line. If I remove that line, the script will run, but
obviously I cannot use any gems, which I need.

If I ssh via terminal to the server, I can run the script fine with:
ruby /usr/local/pgsql/share/migrate.rb 1

I can't figure out why, when ssh'ing via the net/ssh package, the remote
script cannot include rubygems.

Any ideas?
 
B

Blake Miller

ara.t.howard said:
try your command with the full path to the ruby you are expecting to use.

That worked...the new code uses the ruby in /usr/local/bin/ruby:

shell.exec "/usr/local/bin/ruby /usr/local/pgsql/share/migrate.rb
#{params['host']}"
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,817
Latest member
DicWeils

Latest Threads

Top