2016-04-14 3 views
0

Недавно я занимался разработкой в ​​Ruby и хотел бы реализовать некоторый код ruby, который у меня есть на моем веб-сервере iPage. Кажется, что единственный способ для меня, чтобы сделать это, чтобы загрузить свои рубиновые файлы на сервер и их запускать их из PHP сценария по телефону:Запуск программы Ruby через PHP на iPage

<?php 

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

?> 

Мой вопрос я должен даже потрудились делать это, и если так как производительность играет во всем? Например, допустим, я хотел использовать программу Ruby для анализа текста в файле для определенной строки? Будет ли я лучше всего делать это на PHP?

+0

для анализа текста вы можете легко использовать php –

+0

Я знаю, что это был в основном только пример. Основная причина заключается в том, что моя школа заставляет меня заниматься разработкой Ruby, и я хотел реализовать ее в реальном мире. Но это просто не похоже на это ... – Asleepace

+0

Не можете ли вы использовать Ruby on Rails, если вы хотите вызвать Ruby-код из веб-приложения? – Chris

ответ

0

Как правило, вам лучше делать это полностью на PHP, если у вас нет значительного количества кода в Ruby, что необходимо разбить его на отдельную программу или где перевод вашего кода Ruby на PHP слишком трудоемкий, чтобы быть практичным.

Даже тогда не забудьте, что вы можете иметь смешанную среду с приложением Rails или Sinatra, работающим параллельно с вашим PHP-приложением. Вы можете взаимодействовать между ними на уровне сервера, сопоставляя определенные URL-адреса с тем или другим или создавая интерфейс приложения PHP с вашим приложением Ruby через HTTP API.

Вы должны оценить, является ли PHP или Ruby лучшим вызовом для вашего общего приложения и попытайтесь использовать его преимущественно, если не исключительно. У обоих есть свои сильные и слабые стороны, поэтому трудно сказать, что лучше для вас, не зная больше о ваших требованиях.

+0

Плакат не говорил о рельсах, совсем наоборот, в примере просто выполняется рубиновый скрипт. – Meier

+0

@Meier Я просто предлагаю Rails или Sinatra как способ сделать простой скрипт Ruby в чем-то, что вы можете получить через HTTP, вместо того, чтобы быть зависимым от вызова 'system'. Это простой способ создать платформу на основе микросервиса (https://en.wikipedia.org/wiki/Microservices). – tadman

+0

Если это простой рубиновый скрипт, рельсы и синатра переполнены. – Meier

-1

Можно использовать ruby ​​с cgi-интерфейсом. Некоторые хостеры это допускают. Я боюсь, что 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>" 

Попробуйте поставить в в файле «example.rb» или «example.cgi», чтобы попытаться вызвать его с URL.

(К сожалению, многие пользователи рубинов используют большую структуру, называемую рубином на рельсах, и забыли, что есть и более простые варианты. Вы не получите от них большой помощи. Если вы ищете в Интернете, найдите рубин и «cgi», .)

На мой взгляд, гораздо лучше разбирать текст в рубине, чем в php.

+0

Спасибо за отзыв, что определенно проясняет некоторые вопросы, которые у меня были! Что касается прогона CGI, я слышал, что накладные расходы на разбор Ruby не стоит по сравнению с PHP. Но, тем не менее, я создал свою собственную оболочку bashe psuedo-SSH, которая выполняет Ruby-код через PHP (и, вероятно, это худшая идея когда-либо), но я получаю удовольствие, так что угодно! – Asleepace

+0

Если вы собираетесь делать CGI, что похоже на факсимильный аппарат в современную эпоху, вы должны ** по крайней мере ** использовать библиотеку CGI. Делать это вручную еще более загадочно и смешно. – tadman

+0

Честно говоря, у меня есть странное увлечение старыми тайными технологиями, особенно делающие что-то с нуля, но я так думал, что lol – Asleepace

0

Вот изображение базовой командной строки, которую я сделал с PHP, HTML, CSS & jQuery, который, похоже, может запускать файлы Ruby. Кажется немного, но много, но у меня все так и есть!

Basic Command Line

Ниже основное применение терминал, который состоит из двух частей:

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;)

+0

Не включайте ссылки сайтов, которые могут считаться спамом. – Tushar

+0

Не добавляйте изображения кода. Гораздо проще для людей попробовать и реконструировать ваше решение, копируя и вставляя код, вместо того, чтобы читать его с изображения. – Tushar

+0

Хорошо, я только что разместил изображение без каких-либо сведений о сайте, это нормально? Я здесь довольно новый ... – Asleepace

Смежные вопросы