- ベストアンサー
Rubyを使ってhttp経由で外部プログラム起動させる方法
- rubyを使用してhttpを経由して遠隔にあるPCの外部プログラムを起動する方法を教えてください。
- スタンドアロンの場合は、systemコマンドを使用して外部プログラムを起動できますが、遠隔PCに対して行う方法を知りたいです。
- どのような方法で、遠隔PCでhttpを経由して外部プログラムを起動できるのか教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#2です。 度々ですみません。 もっと、簡単な方法がありましたね。 サーバー上にバッチファイルを置いて、以下のようなページにすれば、ダウンロードを促してバッチの実行がIEで可能でした。file://ではうまくいかないようですね。 <html> <META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://serverpc/test.bat" <body> <a href="http://serverpc/test.bat">DL</a> </body> </html>
その他の回答 (4)
- kanemoto_s
- ベストアンサー率45% (112/244)
#2です。 httpサーバからクライアントのプログラムを起動させる。 ことが目的であれば、yu090jpさんが#3後半でおっしゃられているように、applet、VBScpript(、もしくはActiveXコントロール)のようなものを使えば(設定によっては)実行はできるのではないかと思います。 しかし、あまり詳しくないので恐縮ですが、「リモートから任意のコードを実行できる」ということなのでお勧めできません。(なので通常の設定では実行できないようになっているんじゃないかと思います) この辺りはセキュリティに詳しい人に相談を仰いだほうがよいと思います。 httpサーバからクライアントのプログラムを実行したいだけであれば、yu090jpが#1で仰っているようにSSHのようなセキュリティ機能付きのリモートコマンドを使うのが一番お勧めです。 (例えばtelnetでも出来ますが、セキュリティ機能がかなり弱いです。Windows標準のものはセキュリティリスクが高い上に設定が大変なようです。) Pure Ruby な SSH クライアントライブラリ「Net::SSH」 http://webos-goodies.jp/archives/51357031.html SSHクライアント機能なので、cygwinコマンドを使ってもいいですが。 各ローカルPCにSSHサーバを立ち上げておく必要があります。 cygwinのopenSSHを使うか、フリーのWindows用SSHサーバもあります ローカルにhttpサーバを導入する方法は、管理が大変なのでお勧めしません。
- yu090jp
- ベストアンサー率42% (3/7)
#1です。おっしゃっていることが分かりました。先の回答は忘れて下さい。 結論から申し上げますと、個人的にはwebサーバが処理結果を集約管理してブラウザからその情報を照会可能にしているなどの特別な理由がない限り、ブラウザをインターフェイスしない方が良いと思います。システム構成が不必要に回りくどくなるからです。それ自体は問題ありませんが、テストや保守の事を考えると物量的にやることが増えます。代わりにクライアントにスタンドアロン型のシステムをGUI付きで構築する事をお勧め致します。 http://jp.rubyist.net/magazine/?0001-RubyGUI それでも、最初の構成が必要な場合はJRubyをapplet上で走らせるという方法はいかがでしょうか?ユーザはブラウザを開いてwebサーバにあるアップレットを表示します。そしてアップレットがローカルの処理を行います。 http://my.safaribooksonline.com/9780596155063/creating_jruby_applets
- kanemoto_s
- ベストアンサー率45% (112/244)
rubyから、httpのリクエストを実行するのは、リファレンスを参考にして、 http://www.ruby-lang.org/ja/man/html/net_http.html require 'net/http' Net::HTTP.version_1_2 # おまじない Net::HTTP.get_print '192.168.0.5', '/cgi-bin/test.cgi' 等とすればよいと思います。 リモートPCには、httpサーバとCGIプログラムを組み込んでおく必要があります。 httpサーバ http://www.hi-ho.ne.jp/lina/httpd.html RubyでCGIを作ろう http://rubycgi.org/cgi_explanation/index.htm 等を参考に、CGIプログラムを実行可能な状態にしておいてください。 httpサーバの設定で、cgiを許可しておくこと。 パーミッションを正しく設定しておくこと。 Windows+Apacheの場合、CGIの1行目を #!c:/cygwin/bin/ruby 等とするなど、プログラムの場所指定を間違えないこと。 を注意しておけば、初心者でも動かせる思います。
- yu090jp
- ベストアンサー率42% (3/7)
きっと制約があってsshが使えないとかですよね? そうすると手段としてはXML-RPC、SOAP、RESTful APIあたりではないでしょうか?残念ながらsystem "ruby http://localhost/hello.rb"の様な呼び出し方にはなりませんが。私なら環境構築に慣れているということと、フロントエンド(呼び出し元)と同じコーディング環境でそろえられるという観点からRESTful APIを採用するかもしれません。その場合、JSONやXMLなどで結果を返します。 各種呼び出し方 - xmlrpc4r result = server.call("math.addition", 5, 3) - soap4r result = rpc_driver.addition(5,3) - open-uri require 'open-uri' open("http://somewhere/math/addition/5/3"){|result| ... } いずれにせよセキュリティに気をつけて下さい。もっと簡単な方法があるかもしれません。 参考 - XML-RPC vs SOAP vs REST(RESTfulではないです) http://d.hatena.ne.jp/hikm/20070228/1172684400 - xmlrpc4r http://www.linux.or.jp/JF/JFdocs/XML-RPC-HOWTO/xmlrpc-howto-ruby.html - soap4r http://yakinikunotare.boo.jp/orebase/index.php?Ruby%2FSOAP%A4%C7%A4%E4%A4%EA%A4%C8%A4%EA%A4%B9%A4%EB
お礼
ご回答有り難うございます。 windows環境ですがcygwinはお互いに使えるのでsshは利用可能だと思います。 (ssh自体よくしらないのですが・・・勉強します) 状況を整理させていただきますと、想定しているのは社内イントラネットで ・win(サーバー) - win(クライアント) ※クライアントは複数 ・クライアントにもcygwinはインストール可能。場合によってはapacheなども起動可能。 ・クライアントはサーバーにあるrailsのHP上でフォームをクリックすることによって クライアント自身のローカルにある各種のスクリプトや実行ファイルを起動。 ちょっと変なことをやろうとしているのだとは思いますが・・・ 要はクライアントにrubyスクリプトやバッチファイルを意識せずにブラウザから 起動させたいと考えています。 sshを使えば比較的簡単なのでしょうか? よろしくお願いいたします。
お礼
ご回答ありがとうございます。 私の質問の書き方が悪かったようなので、No1様の返答にも情報を整理して書きましたが、 想定しているのは社内イントラネットで ・win(サーバー) - win(クライアント) ※クライアントは複数 ・クライアントにもcygwinはインストール可能。場合によってはapacheなども起動可能。 ・クライアントはサーバーにあるrailsのHP上でフォームをクリックすることによって クライアント自身のローカルにある各種のスクリプトや実行ファイルを起動。 というようにクライアントがブラウザを通して自身のローカルスクリプトや実行ファイルを 動かしたいです。 よくプログラマ以外の人にその人のローカルPCでスクリプトなどを実行させるときに バッチファイルをたたいてスクリプトを動かしてもらうことが あると思いますが、それをブラウザ操作でやらせたいのです。 妙案がありましたら、ご指導よろしくお願いいたします。