2012-04-04 81 views
0

在Ruby脚本中是否有一种方法可以让服务器运行一些命令。如何使用Ruby在远程服务器上运行shell命令?

这里是我的脚本

Net::SFTP.start(IP_ADDRESS, 'root', :keys => ["/Users/user/.ssh/id_rsa"]) do |sftp| 
    sftp.mkdir! "/srv/new_dir" 
    sftp.dir.foreach("/srv/crm/current") do |entry| 
     puts entry.longname 
     sftp.file.open("/srv/new_dir", "w") do |f| 
     f.puts entry 
     end 
    end 
end 

基本上我想SFTP发布到服务器和文件夹复制到一个新的文件夹,我想重新启动Apache。我试过这个:

FileUtils::sudo "/etc/init.d/apache2 reload" 

但这不起作用。任何想法我做错了,或者这是否甚至可能?

回答

1

由于你没有真的在做任何文件传输,我不认为你需要使用SFTP。你可以简单地用Net::SSH重写这个脚本。然后你可以正常访问一个shell并且你的Apache命令只是这个过程中的另一个步骤。

0

我会这样做Capistrano

UPDATE:

Capistrano的是专为部署Rails应用程序,但你可以使用它作为一个工具来管理远程计算机。用一个简单的配方,你可以完成你的工作。

假设你有一个Capfile这样的:

desc "sample recipe" 
task :sample do 
    Dir.glob('**/*') do |f| 
     upload f, "tmp/#{f}" 
    end 
    run 'ls -lr' 
end 

role :app, "host name or ip" 
set :user, "user_name" 

然后你可以运行cap sample上传文件并运行任何命令。

它可能是矫枉过正,但它比使用Net API更容易。

+1

你会改变剧本...你会怎么做capistrano .... cap是部署rails应用程序 – Trace 2012-04-04 13:39:49

相关问题