2016-04-14 7 views
0

最近、私はRubyで多くの開発を行っていて、自分のiPage WebサーバーにいくつかのRubyコードを実装したいと考えています。私がこれを行うための唯一の方法は、サーバーへの私のRubyファイルをアップロードすることで、それらを呼び出すことにより、PHPスクリプトからそれらを実行しているようです:iPageでPHP経由でRubyプログラムを実行

<?php 

system("ruby web-test.rb"); 

?> 

私の質問は、私もこれをやってわざわざ必要がある場合、及びどのようにパフォーマンスがすべてのものに影響しますか?たとえば、特定の文字列のファイル内のテキストを解析するためにRubyプログラムを使用したいとします。私はPHPでこれをすべてやっている方が良いでしょうか?

+0

テキストを解析すると簡単にphpを使用できます –

+0

Ya私はそれが主に単なる例であることを知っています。主な理由は、私の学校が私にRubyの開発をさせていることです。実世界で実装したいと思っています。しかし、それだけの価値があるとは思われません... – Asleepace

+0

WebアプリケーションからRubyコードを呼びたい場合、Ruby on Railsを使用できませんか? – Chris

答えて

0

Rubyで大量のコードを別のプログラムに分割する必要があるか、RubyコードをPHPに翻訳するのに時間がかかり過ぎる場合は、一般的にPHPで完全に行う方がよいでしょう。

それでも、PHPアプリケーションと並行して実行されているRailsまたはSinatraアプリケーションとの混在環境を持つことができることを忘れないでください。サーバーレベルで、特定のURLを相互にマッピングしたり、HTTP APIを介してRubyアプリケーションとPHPアプリケーションインターフェイスを作ることで、それらの間でインターフェースすることができます。

PHPやRubyがあなたのアプリケーション全体に最適な呼び出しであるかどうかを評価し、排他的ではないにしても、PHPやRubyを主に使用するようにしてください。彼らはどちらもそれぞれの長所と短所を持っているので、あなたの要件についてもっと知らなくても、あなたに最も適していることを言うのは難しいです。

+0

ポスターはレールについて話していませんが、まったく反対です。この例ではルビスクリプトを実行しています。 – Meier

+0

@Meier RailsやSinatraは、単純なRubyスクリプトを、 'system'呼び出しに依存するのではなくHTTP経由でアクセスできるものにする方法として提案しています。それは[マイクロサービスベースのプラットフォーム](https://en.wikipedia.org/wiki/Microservices)を構築する簡単な方法です。 – tadman

+0

シンプルなルビースクリプトであれば、レールとシンナラは過剰です。 – Meier

-1

cgi-interfaceでrubyを使用することは可能です。一部のホスティング業者はこれを許可しています。私はipagesがこれを許可しないことを恐れています。彼らはPHP、perl、pythonだけに言及しています。 http://www.ipage.com/knowledgebase/beta/article.bml?ArticleID=187 ルビースクリプトを実行できるかどうかは、ipageのヘルプデスクに問い合わせることができます。

基本的なルビーCGIスクリプトは次のようになります。

#!/usr/bin/ruby 

puts "HTTP/1.0 200 OK" 
puts "Content-type: text/html\n\n" 
puts "<html><body>This is a test</body></html>" 

は、URLとそれを呼び出すようにしようとするファイル「example.rb」または「example.cgi」に入れるようにしてください。

(残念ながら、多くのRubyユーザーはruby on railsと呼ばれる大きなフレームワークを使用しており、より単純なオプションもあることを忘れてしまいました。 。)

私の意見では、それはRubyのテキストをPHPで解析するよりもはるかにいいです。

+0

フィードバックのおかげで、私はいくつかの質問を明確にクリアしました! CGIの実行に関しては、Rubyを解析するためのオーバーヘッドがPHPに比べて価値がないと聞いています。しかし、私は自分のPsuedo-SSH bashシェルを作り、PHPを使ってRubyコードを実行しています(これは最悪のアイデアです)。 – Asleepace

+0

現代でファックス機を使うようなCGIをやっているなら、少なくとも** CGIライブラリを使うべきです。手でそれをすることは、もっと秘密でばかげています。 – tadman

+0

正直なところ、私は昔の秘密の技術に奇妙な魅力を感じています。特にゼロからのことですが、それは私が思ったことです。 – Asleepace

0

ここでは、PHP、HTML、CSS & jQueryでRubyファイルを実行できるように思われる基本的なコマンドラインの画像を示します。少しだけそうだと思うけど、何でもそんなに持っているよ!以下

Basic Command Line

2つの部分から構成され、基本的な端末アプリケーションである:

1)cmd.php - システムを処理するための単純なPHPファイルが

2コマンド)のindex.php - Aそれと対話するユーザーインターフェイス。

これはきわめて基本的なコマンドラインインターフェイスですが、開始するには良い場所です!

<?php 

// Be sure to set your password from 1234567 to something more secure!!! 
define("MY_PASSWORD", "1234567"); // <--- Important cange to your password 

// Check if there is a command and password submitted before executing 
if (isset($_POST['cmd']) == true && $_POST['key'] == MY_PASSWORD) { 

    system($_POST['cmd'],$output); // execute request 

     // Return error if output is not equal to 0 
    if ($output == 127) { err("invalid command..."); } 
else if ($output == 1) { err("operation no permitted..."); } 
else if ($output == 2) { err("no such file/directory..."); } 
else if ($output == 3) { err("no such process..."); } 
else if ($output == 4) { err("interrupted system call!"); } 
else if ($output == 5) { err("i/o error..."); } 
else if ($output != 0) { err("error ($output)..."); } 
} else { 
    echo(-1); // Login Failed! 
} 
function err($msg) { 
    echo("<span class='errs'>$msg</span>"); // error message 
} 

?> 

そしてここで、ユーザインターフェースで、同じディレクトリにそれらの両方を保存し、他の何かに上記のファイルに1234567からパスワードを更新するようにしてください...

<html> 
<head> 
<title>iCMD</title> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js></script> 
<style> 
body, html { background-color:#000000; color:#1AD6FD; outline:0; padding:0; outline:0; margin:0; border:0; } 
input { display:inline-block; background-color:transparent; font-family:monospace; font-size:14px; padding:10px; outline:none; border:none; min-height:60px; height:10%; width:100%; color:#FFF; } 
#cmd-frame { background-color:#000000; position:fixed; bottom:0px; right:0px; left:0px; } 
#frame { background-color:#111111; margin-top:-50px; } 
#sys { overflow:auto; padding:10px; height:90%; } 
.cmdo { color:#FFFFFF; margin-left:10px; margin-top:5px; margin-bottom:5px; } 
.code { color:#FFFFFF; } 
.cmdi { color:#1AD6FD; } 
.cmdc { color:#39FF14; } 
.errs { color:#FF2A68; } 
</style> 
</head> 
<body> 
<div id="frame"> 
<pre><code> 
    <div id="sys"></div> 
<code><pre> 
</div> 
<div id="cmd-frame"> 
    <table width='100%' padding="0px"><tr> 
     <td width='150px'><span style='padding-left:8px;'> [command-line: ~ $</span></td><td><input type="txt" id="cmd" name="cmd" placeholder=""></td> 
    </tr></table> 
</div> 
<script> 
inp("Welcome to the command line terminal! (V. 1.0)"); 
inp("Please enter your password to continue..."); 

mem = ["Hello, world"]; 
key = ""; 
idx = 0; 

shiftlock = false; 
$(document).on('keyup', function(e) { shiftlock = e.shiftKey }); 
$(document).on('keydown', function(e) { 
    shiftlock = e.shiftKey 
    scrolling = false; 
    if (e.which == 38) { 
     scrolling = true; 
     idx -= 1; 
    } else if (e.which == 40) { 
     scrolling = true; 
     idx += 1; 
    } 
    if (idx < 0) { 
     idx = 0; 
    } 
    if (idx > mem.length) { 
     idx = mem.length; 
    } 
    if (scrolling == true) { 
     mem.push($('#cmd').val()); 
     $('#cmd').val(mem[idx]); 
    } 
}); 
$('#cmd').keypress(function(e) { 
    if (e.which == 13 && shiftlock == false) { 
     command = $("#cmd").val(); 
     mem.push(command); 
     idx = mem.length; 
     if (key) { 
      inp(command); 
      exe(command); 
     } else { 
      inp("******"); 
      usr(command); 
     } 
    } 
}); 
function usr(tmp) { 
    $.post("cmd.php",{ 
     cmd: "echo success!", 
     key: tmp 
    }, 
    function(data, status) { 
     if (parseInt(data) != -1) { 
      key = tmp; 
      out(data); 
     } else { 
      out("<span class='errs'>login failed...</span>"); 
     } 
    }); 
} 
function exe(cmd) { 
    cmd = cmd.replace("read ", "ruby read.rb "); 
    cmd = cmd.replace("save ", "ruby save.rb "); 

    // Important to change cmd.php to where your php component is (same directory)! 
    $.post("cmd.php",{ 
     cmd: cmd, 
     key: key 
    }, 
    function(data, status) { 
     out(data) 
    }); 
} 
function inp(cmd) { 
    $('#cmd').val(""); 
    $("#sys").append("<span class='cmdi'>[command-line: ~ $ <span class='code'>" + cmd + "</span></span>\n"); 
    dwn(); 
} 
function out(msg) { 
    if (msg) { $("#sys").append("<p class='cmdo'>"+msg+"</p>"); } 
    dwn(); 
} 
function err(msg) { 
    $("#sys").append("<p class='errs'>"+msg+"</p>"); 
    dwn(); 
} 
function dwn() { 
    var e = document.getElementById("sys"); 
    e.scrollTop = e.scrollHeight + 30; 
} 
</script> 
</body> 
</html> 

基本的にそれが処理することができます一度に1つの要求しか受け付けず、自己の記憶を保持しないので、できることには限りがあります。しかし、それはむしろすばやく機能し、非常に強力ですので、rm -rfを入力しないでください)

+0

スパムとみなされるサイトのリンクを含めないでください。 – Tushar

+0

コードの画像を追加しないでください。イメージからコードを読み取るのではなく、コードをコピーして貼り付けることで、ソリューションの再構築を簡単に行うことができます。 – Tushar

+0

私はちょうどウェブサイトの情報なしで写真を投稿しました、それは大丈夫ですか?私はここでかなり新しいです... – Asleepace

関連する問題