0

Ruby 脚本中有没有办法 sftp 到服务器并运行一些命令。

这是我的脚本

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"

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

4

2 回答 2

1

由于您实际上并没有进行任何文件传输,因此我认为您不需要使用 SFTP。您可以简单地使用Net::SSH. 然后您就可以正常访问 shell,而您的 Apache 命令只是此过程中的另一个步骤。

于 2012-04-04T14:07:17.240 回答
0

我会用Capistrano来做。

更新:

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 容易得多。

于 2012-04-04T13:37:14.503 回答