2012-04-04 10 views
0

Rubyスクリプトでサーバーにsftpしてコマンドを実行する方法はありますか?Rubyでリモートサーバ上でシェルコマンドを実行するにはどうすればよいですか?

は、ここに私のスクリプトです

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を使用してこのスクリプトを書き換えることができます。次に、シェルへの通常のアクセス権があり、Apacheコマンドはこのプロセスのもう1つのステップにすぎません。

0

Capistranoとします。

UPDATE:

カピストラーノは、レールのアプリケーションを展開するために設計されていますが、リモートマシンを管理するためのツールとして使用することができます。シンプルなレシピで、あなたの仕事を終わらせることができます。

は、あなたがこのよう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

関連する問題