как вызвать скрипт ruby ​​из php? - PullRequest
5 голосов
/ 09 ноября 2010

Я пишу плагин Wordpress в php, и следующий шаг - это своего рода дополнение к этому плагину.

Это дополнение будет очищать данные из Интернета, отправлять формы и т. Д.готово еще до того, как у меня появились мысли о плагине Wordpress - он закодирован в ruby ​​с использованием mechanize .В любом случае я не нашел ничего похожего на механизацию в php.

Но я не знаю, как лучше всего вызвать мой скрипт ruby ​​из Wordpress .Некоторые задачи будут выполняться cron.А как насчет тех, которые основаны на запросе пользователя?

  • php скрипт только запускает скрипт ruby.Он не будет ждать / требовать ничего от вывода ruby ​​
  • Плагин Wordpress полностью переносим и функционален без сценария ruby ​​.Руби добавляет еще кое-что.Если кому-то это нужно.
  • все будет работать на моем Linux-сервере, где у меня есть root-доступ

Ответы [ 3 ]

7 голосов
/ 09 ноября 2010

Плагин WordPress, который зависит от Ruby, не будет переносимым. Это нормально, если вы единственный, кто будет его использовать.

Если сценарию Ruby необходимо вернуть результат, который будет немедленно использован вызывающим его PHP-сценарием, тогда что-то вроде exec () является единственным способом. Убедитесь, что вы избегаете любых аргументов, передаваемых вами скрипту Ruby; в противном случае вы будете уязвимы для инъекционных атак.

Если сценарию Ruby не нужно сразу возвращать результат (например, некоторая фоновая обработка, например, создание миниатюр), то я думаю, что наилучшим способом было бы для сценария PHP вставить строку в базу данных MySQL или что-то подобное , Сценарий Ruby может работать в фоновом режиме или запускаться из cron, периодически проверять базу данных на наличие новых заданий и выполнять любую необходимую ему обработку. Этот подход позволяет избежать проблем с производительностью и безопасностью exec () и, возможно, также более масштабируем. (По аналогичному подходу скрипт Ruby прослушивает сокет, а ваши PHP-скрипты подключаются к сокету. Но для его правильной работы требуется больше усилий.)

2 голосов
/ 09 ноября 2010

На твоем месте я бы обработал все рубиновые вещи из cron.Создайте очередь в БД для обработки пользовательских запросов, затем вызовите сценарий (в ruby?) Cron, соберите все необработанные задания из очереди и запустите их, затем удалите задание из очереди (или установите какой-либо флаг дляэто делается).Таким образом, вам не нужно вызывать exec, что в большинстве случаев будет запрещено, если пользователь не работает на VPS / выделенном сервере, где у него есть root-доступ.

Вы также можете сделать это отдельной работойи пусть он опрашивает БД на предмет необработанных заданий более регулярно, чем основное задание ... при необходимости.

Тем не менее, возникает вопрос ... зачем использовать ruby ​​в приложении php blog / cms ??????

1 голос
/ 09 ноября 2010

Используйте exec () для запуска интерпретатора ruby, указав путь к вашему скрипту ruby.

http://php.net/manual/en/function.exec.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...