2010-11-09 2 views
4

Я пишу Wordpress в php, и следующий шаг - это что-то вроде добавления к этому подключаемому модулю.Как вызвать ruby ​​script из php?

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

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

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

Почему бы вам написать плагин PHP WordPress в Ruby? – jcolebrand

+1

извините за путаницу ... Плагин Wordpress в php, что-то поверх этого плагина, вроде как в стороне, будет закодирован в рубине.И иногда мне нужно запустить ruby ​​с php. – Radek

ответ

6

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

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

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

+0

Мне нравится решение для базы данных. (+1) Я, вероятно, поеду за этим. Что делать, если я хочу, чтобы выполнение было мгновенным? Чтобы написать какой-то веб-сервер приложений? – Radek

+1

@ Radek Если вы хотите, чтобы выполнение было мгновенным _without_ с помощью exec(), вы должны сделать скрипт Ruby чаще проверять базу данных, возможно, каждые 3-5 секунд. Если у вас больше контроля над сервером, вы можете использовать [Resque] (https://github.com/blog/542-introducing-resque) вместо MySQL для эффективной обработки очереди. – kijin

2

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

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

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

+0

Так нормально ли запускать рубиновый скрипт из cron каждую минуту? поэтому похоже, что он был запущен из плагина Wordpress? – Radek

+0

Каждые несколько минут должно быть в порядке ... Независимо от того, с каким интервалом вы переходите - помните, что вы каждый раз нажимаете на БД с запросом, чтобы он стал частью общей нагрузки на БД. – prodigitalson

+0

ОК, тогда возникает другой вопрос. Должен ли я использовать Wordpress db для очереди заданий или что-то еще? Может быть, есть что-то менее дорогостоящее – Radek

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