Rubyを使ってhttp経由で外部プログラム起動させる方法

このQ&Aのポイント
  • rubyを使用してhttpを経由して遠隔にあるPCの外部プログラムを起動する方法を教えてください。
  • スタンドアロンの場合は、systemコマンドを使用して外部プログラムを起動できますが、遠隔PCに対して行う方法を知りたいです。
  • どのような方法で、遠隔PCでhttpを経由して外部プログラムを起動できるのか教えてください。
回答を見る
  • ベストアンサー

rubyを使ってhttp経由で外部プログラム起動させたい

rubyを使ってhttp経由で外部プログラム起動させたい httpを経由して遠隔にあるPCのローカルスクリプトやC言語の実行バイナリを起動するにはどうすればよいでしょうか? スタンドアロンの場合は、 system "ruby hello.rb" system "ruby c:\\test\\hello.rb" system "sample.exe" などで外部プログラムを起動できると思いますが、これを遠隔PCに対して行いたいです。 イメージとしては、(アドレスはテスト用として) system "ruby http://localhost/hello.rb" のようなことがしたいのですが・・・ よろしくお願いいたします。

  • Ruby
  • 回答数5
  • ありがとう数39

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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)

回答No.4

#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)
回答No.3

#1です。おっしゃっていることが分かりました。先の回答は忘れて下さい。 結論から申し上げますと、個人的にはwebサーバが処理結果を集約管理してブラウザからその情報を照会可能にしているなどの特別な理由がない限り、ブラウザをインターフェイスしない方が良いと思います。システム構成が不必要に回りくどくなるからです。それ自体は問題ありませんが、テストや保守の事を考えると物量的にやることが増えます。代わりにクライアントにスタンドアロン型のシステムをGUI付きで構築する事をお勧め致します。 http://jp.rubyist.net/magazine/?0001-RubyGUI それでも、最初の構成が必要な場合はJRubyをapplet上で走らせるという方法はいかがでしょうか?ユーザはブラウザを開いてwebサーバにあるアップレットを表示します。そしてアップレットがローカルの処理を行います。 http://my.safaribooksonline.com/9780596155063/creating_jruby_applets

回答No.2

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 等とするなど、プログラムの場所指定を間違えないこと。 を注意しておけば、初心者でも動かせる思います。

usagiya
質問者

お礼

ご回答ありがとうございます。 私の質問の書き方が悪かったようなので、No1様の返答にも情報を整理して書きましたが、 想定しているのは社内イントラネットで ・win(サーバー) - win(クライアント) ※クライアントは複数 ・クライアントにもcygwinはインストール可能。場合によってはapacheなども起動可能。 ・クライアントはサーバーにあるrailsのHP上でフォームをクリックすることによって  クライアント自身のローカルにある各種のスクリプトや実行ファイルを起動。 というようにクライアントがブラウザを通して自身のローカルスクリプトや実行ファイルを 動かしたいです。 よくプログラマ以外の人にその人のローカルPCでスクリプトなどを実行させるときに バッチファイルをたたいてスクリプトを動かしてもらうことが あると思いますが、それをブラウザ操作でやらせたいのです。 妙案がありましたら、ご指導よろしくお願いいたします。

  • yu090jp
  • ベストアンサー率42% (3/7)
回答No.1

きっと制約があって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

usagiya
質問者

お礼

ご回答有り難うございます。 windows環境ですがcygwinはお互いに使えるのでsshは利用可能だと思います。 (ssh自体よくしらないのですが・・・勉強します) 状況を整理させていただきますと、想定しているのは社内イントラネットで ・win(サーバー) - win(クライアント) ※クライアントは複数 ・クライアントにもcygwinはインストール可能。場合によってはapacheなども起動可能。 ・クライアントはサーバーにあるrailsのHP上でフォームをクリックすることによって  クライアント自身のローカルにある各種のスクリプトや実行ファイルを起動。 ちょっと変なことをやろうとしているのだとは思いますが・・・ 要はクライアントにrubyスクリプトやバッチファイルを意識せずにブラウザから 起動させたいと考えています。 sshを使えば比較的簡単なのでしょうか? よろしくお願いいたします。

関連するQ&A

  • Ruby の実行について

    Ruby初心者です。 メモ帳で puts "hello world"と打ち、名前をsample.rbにし、c:\Users\rbというファイルに保存しました。次にコマンドプロンプトで c:\Users\rb>ruby sample.rb と入力したんですが、'ruby'は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。といわれました。 どうすればいいのですか? 本を見てもネット上のサイトをみても >ruby ●●.rb なんです。

    • ベストアンサー
    • Ruby
  • Rubyスクリプトから他のプログラムを起動する方法について教えてください

    Rubyスクリプトから他のコマンド, プログラムを起動するのに、system()やexec()を使用していますが、これらの組み込み関数だと、起動したプログラムが終了するまでRubyスクリプトに戻ってきません。 外部プログラムを起動した後、すぐにRubyスクリプトに戻るようにするにはどうすればよいでしょうか? よろしくお願いします。

  • Ruby vim 実行の仕方

    Rubyをvimで書いたので、実行しようとしたのですが、実行できないです。何がダメなのでしょうか? 手順としては、 vimで puts("Hello World!")と書きました。 w hello_ruby.rbと書いて保存しました。 コマンドプロンプトを開いて、hello_ruby.rbと入れて、Enterを押したのですが、 ’hello_ruby.rb’は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。 と出ます。 コマンドプロンプトで、ruby -v と入れると、Rubyのバージョンは出てきます。 何がいけないのでしょうか?修正の仕方を教えてください。 詳しい方いらっしゃいましたら、よろしくお願い致します。

    • ベストアンサー
    • Ruby
  • RubyとMeadow(Emacs)について

    RubyとMeadow(Emacs)について 自分のパソコンにRubyとMeadowをインストールしたんですが、 Meadowでソースプログラムを作ってからコマンドプロンプトでそれを実行しようとすると ’ruby’は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 と出てきてしまいます。 どうすれば実行できるのでしょうか? 教えていただきたいです。 ちなみにこれは夏休みの宿題で、 プリントに書かれていたとおりにやりました。 間違いがないか自分でなんども確認しましたが、 たぶん書いてあることは間違っていないと思います。 どのようにやったかというと、 Meadowでhello.rbというファイルに print("Hello, Ruby World !\n") と打ち込み、c:\progIに保存。 コマンドプロンプトを開いて progIに移動し、 ruby hello.rb →[Enter] です。

    • ベストアンサー
    • Ruby
  • Ruby初心者です。最初でつまずいています

    MacBookAir OS X El Capitan ver 10.11.5 にてruby 2.3.1p112を使用しています。 print (“hello”) とだけ書いたtest.rbというファイルを ターミナルで ruby test.rb と打ち込んで作動させたのですが、 test.rb:1:in `<main>': undefined local variable or method `“hello”' for main:Object (NameError) と表示されてしまいます。 本当に初期の初期の段階で、プログラムも本当に単純なのに、なぜ作動しないかがわかりません。 どなたか、考えられる原因をご指摘いただけると幸いです。

    • ベストアンサー
    • Ruby
  • Ruby のコードの実行の仕方がわかりません。

    Ruby のコードの実行の仕方がわかりません。 私は、Javaプログラマーなのですが、Javaコードに行番号をつけて 整形したHTMLコードを出力してくれるツールを探していたところ Rubyで書かれたツール rb2html.rb にたどり着きました。 そこで、   http://rubyinstaller.org/download.html のサイトから、Ruby 1.8.7-p249 (RC2) をダウンロードし、WindowsXP(SP3)の   C:\Program Files\Ruby にインストールし   C:\Program Files\Ruby\bin にパスを通しました。コマンドプロンプトにて   C:\> ruby --version の入力に対して   ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mingw32] と出力されますので、インストールまでは成功していると思います。 次に、 rb2htmlrb を   http://www.nslabs.jp/rb2html.rhtml から   rb2html-2.4.tar.gz をダウンロードし、解凍後、rb2html-2.4 を   C:\Program Files\Ruby に置きました。 そして、とりあえずテストとして、同梱のsamples/Hoge.java で動作を確認してみようと   C:\Program Files\Ruby\rb2html-2.4>rb2html.rb samples/Hoge.java   | と入力してみたところ、何も出力されず、上記のようにカーソルが 点滅した状態で止まってしまっています。 どこに、問題があるのか、ご教授いただければ幸いです。

  • rubyのWatirでIEが起動しない。

    rubyのWatirでIEが起動しない。 こんにちは rubyをはじめて使ってみたものです。 自動化のためにWatirを使用したいです。 インストールは無事終わっていますが、サンプルプログラムを叩くと以下の様なエラーが出てしまいにっちもさっちも行きません。 IEも起動できません。 どなたか助けていただけると本当にうれしいです。 サンプルプログラム require 'watir' agent = Watir::IE.start "http://www.google.co.jp/" ruby.exe -コンポーネントが見つかりません msvcrt-ruby18.dllが見つからなかったため、このアプリケーションを開始できませんでした。アプリケーションをインストールしなおすとこの問題は解決される場合があります。 C:/Ruby191/lib/ruby/gems/1.9.1/gems/windows-api-0.4.0/lib/windows/api.rb:1:in `r equire': 126: 指定されたモジュールが見つかりません。 - C:/Ruby191/lib/ruby/gem s/1.9.1/gems/win32-api-1.4.6-x86-mingw32/lib/win32/api.so (LoadError) from C:/Ruby191/lib/ruby/gems/1.9.1/gems/windows-api-0.4.0/lib/windows/a pi.rb:1:in `<top (required)>' from C:/Ruby191/lib/ruby/gems/1.9.1/gems/windows-pr-1.0.9/lib/windows/er ror.rb:12:in `require' from C:/Ruby191/lib/ruby/gems/1.9.1/gems/windows-pr-1.0.9/lib/windows/er ror.rb:12:in `<top (required)>' from C:/Ruby191/lib/ruby/gems/1.9.1/gems/win32-process-0.6.2/lib/win32/p rocess.rb:1:in `require' from C:/Ruby191/lib/ruby/gems/1.9.1/gems/win32-process-0.6.2/lib/win32/p rocess.rb:1:in `<top (required)>' from C:/Ruby191/lib/ruby/gems/1.9.1/gems/watir-1.6.5/lib/watir/ie-proces s.rb:1:in `require' from C:/Ruby191/lib/ruby/gems/1.9.1/gems/watir-1.6.5/lib/watir/ie-proces s.rb:1:in `<top (required)>' from C:/Ruby191/lib/ruby/gems/1.9.1/gems/watir-1.6.5/lib/watir/ie.rb:45: in `require' from C:/Ruby191/lib/ruby/gems/1.9.1/gems/watir-1.6.5/lib/watir/ie.rb:45: in `<top (required)>' from gui.rb:2:in `<main>' rubyのバージョンは C:\ruby>ruby -v ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-mingw32] です。 One-Click Ruby Installer for Windowsを使用してインストールしました。 watirは以下のURL通りにインストールしました。 gem update --system gem install watir http://www.sixapart.jp/techtalk/2008/06/watir_1.html OSはwindowsXP SP2です。 どなたか本当に助けていただけると感謝でいっぱいの気持ちになります。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Ruby
  • なぜRuby1.9が日本語処理できない問題

    次の簡単なRubyプログラム(test.rb)ですが、 #!/usr/bin/env ruby # -*- coding: utf-8 -*- while gets $_.chomp! tmp = $_.split(/ /) s0 = tmp[0] s1 = tmp[1] s2 = tmp[2] puts "line #{s0}\t#{s1}\t#{s2}" end 入力テキストファイル(hello.txt)は次の2行です。 1 hello, everybody! 2 皆さん、 こんにちは。 test.rb hello.txt を実行すると、Ruby 1.8.7 は問題なく正常ですが。Ruby 1.9.3は次のエラーになりました。 line 1 hello, everybody! k1.rb:7:in `split': invalid byte sequence in US-ASCII (ArgumentError) from k1.rb:7:in `<main>' 何故でしょうか。詳しい方に教えて頂けるでしょうか。 どうぞ宜しくお願いします。

    • ベストアンサー
    • Ruby
  • RubyをOSXで!が動かなくて困り果てています(T T)

    プログラミング言語Rubyを,MacOSX(10.5.5)という環境で学ぼうとしています. 簡単なサンプルコードをコピペして,ターミナルで ruby test.rb(print \"Hello Ruby\\n\"とだけ書いている) としても,何の変化もないんです. ruby -v でちゃんとバージョンが表示されるのでパスは通っているはずですが... なんだか,最初でつまずいてしまって意気消沈してしまっています. 何か打つ手をご存知のかた,どうやったらプログラムが動くでしょうか? よろしくお願いします.

  • ruby erbでの表示がうまく行きません。

    本当に初心者ですので、質問が分かりづらいかもしれませんが、よろしくお願いします。 環境は、OS:WindowsXPSP3 ApacheHttpserver2.2 Ruby-186-26 RubyGems -v 0.9.4 です。 erbを使って簡易掲示版を作ろう!!と言うものなのですが、 ・keijiban.html ・keijiban.rb ・data.csv(書き込んだデータ保存用csv)・・・cgi-binに保存 ************************************************************ 入力ミスは散々見直しました。 添付ファイルが2つのファイルです。localhostで表示してみていますが、 初期表示は出来ますが、データを追加しようと『投稿する』ボタンをクリックすると 画面が真っ白になります。 入力ミスは散々見直しました。 初期表示が出来ると言う事は、keijiban.rbは動作していると思われます。 REDで簡易解析と言うのをしてみた所、次のエラーが出たり出なかったりです。 C:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require': no such file to load -- rde (LoadError) from C:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require' from C:\Program Files\RDE\rde_export.rb:9 from C:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require' from C:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require' from C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/rb1D.tmp:71 Complete(1) 何か、インストールが足りないのでしょうか? 教えて下さい。 2000字超えたため、別ファイルに全文を記入しています。

    • ベストアンサー
    • Ruby

専門家に質問してみよう