2012-04-04 103 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

相關問題