最近我在Ruby中进行了大量的开发,并希望将我的一些ruby代码实现到我的iPage Web服务器上。似乎我这样做的唯一方法是将我的ruby文件上传到服务器,然后通过调用它们从PHP脚本运行它们:
<?php
system("ruby web-test.rb");
?>
我的问题是我是否应该费心去做这件事,如果是这样的话,表现如何影响一切?例如,让我说我想使用Ruby程序来解析文件中的特定字符串文本?在PHP中这样做会更好吗?
答案 0 :(得分:0)
通常你最好在PHP中完成这项工作,除非你在Ruby中有大量的代码需要将它分解成一个单独的程序,或者将你的Ruby代码转换为PHP太费时而不实用。 / p>
即使这样,也不要忘记你可以拥有一个与你的PHP应用程序并行运行的Rails或Sinatra应用程序的混合环境。您可以在服务器级别与它们之间进行接口,将某些URL映射到一个或另一个,或者通过HTTP API与您的Ruby应用程序建立PHP应用程序接口。
您应该评估PHP或Ruby是否是对整个应用程序的最佳调用,并尝试主要使用一个(如果不是唯一的话)。他们都有各自的优点和缺点,所以很难说在不了解你的要求的情况下哪一个最适合你。
答案 1 :(得分:0)
这是我用PHP,HTML,CSS&amp; amp;似乎能够运行Ruby文件的jQuery。似乎有点但很多,但我有这样的一切!
以下是基本的终端应用程序,它由两部分组成:
1)cmd.php - 一个处理系统命令的简单php文件
2)index.php - 与之交互的用户界面。
它是一个非常基本的命令行界面,但是一个好的起点!
<?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;)
答案 2 :(得分:-1)
可以使用带有cgi接口的ruby。一些主持人允许这样做。我担心ipages不允许这样,他们只提到php,perl和python: http://www.ipage.com/knowledgebase/beta/article.bml?ArticleID=187 如果允许您运行ruby脚本,可以询问ipage的帮助台。
基本的ruby 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>"
尝试输入文件'example.rb'或'example.cgi'以尝试使用网址调用它。
(不幸的是,许多ruby用户在rails上使用了一个名为ruby的大框架,并且忘记了也有更简单的选项。你不会从他们那里获得太多帮助。如果你在网上搜索,请查找ruby和“cgi”。 )
在我看来,解析ruby中的文本比使用php更好。