2010-11-09 3 views
4

Je vous écris un plug Wordpress en php et la prochaine étape est une sorte d'ajouter à ce plug-in.comment appeler le script ruby ​​de php?

Les ajouter gratteraient les données de web, l'envoi de formulaires etc. Je cette partie presque prêt à partir de la temps avant que j'ai eu des idées sur le plugin Wordpress - il est codé en ruby ​​en utilisant mécaniser. Je n'ai rien trouvé de similaire à mécaniser en PHP de toute façon.

Mais je ne sais pas quelle est la meilleure façon de appeler mon script ruby ​​à partir de Wordpress. Certaines tâches seront gérées par cron. Qu'en est-il de ceux basés sur la demande de l'utilisateur?

  • script php ne se déclenche que le script Ruby. Il ne sera pas attendre/exiger quoi que ce soit de la sortie de Ruby
  • plugin pour Wordpress est entièrement portable et fonctionnel sans rubis script. Ruby ajoute quelque chose de plus. Si quelqu'un l'exige.
  • tout sera en cours d'exécution sur mon serveur linux où j'ai un accès root
+2

pourquoi voudriez-vous écrire un plugin WordPress PHP en Ruby? – jcolebrand

+1

désolé pour la confusion ... Wordpress plugin en php, quelque chose sur le dessus de ce plugin, un peu de côté, sera codé en ruby.Et parfois j'ai besoin de courir ruby ​​de php. – Radek

Répondre

6

Un plugin WordPress qui dépend de Ruby ne va pas être portable. C'est OK si vous êtes le seul à l'utiliser, cependant.

Si le script Ruby doit retourner un résultat qui sera utilisé immédiatement par le script PHP qui l'appelle, alors quelque chose comme exec() est le seul moyen. Assurez-vous d'échapper tous les arguments que vous passez au script Ruby; sinon, vous serez vulnérable aux attaques par injection. Si le script Ruby n'a pas besoin de retourner un résultat immédiatement (par exemple un traitement en arrière-plan, comme la génération de vignettes) alors je pense que le meilleur moyen serait que le script PHP insère une ligne dans une base de données MySQL. similaire. Le script Ruby peut fonctionner en arrière-plan ou s'exécuter à partir de cron, vérifier périodiquement la base de données pour de nouveaux travaux, et faire le traitement dont il a besoin. Cette approche évite les problèmes de surcharge et de sécurité liés à la performance de exec(), et elle est sans doute aussi plus évolutive. (Une approche similaire aurait le script Ruby écouter sur un socket et vos scripts PHP se connecter à la prise. Mais cela nécessite plus de travail pour y arriver.)

+0

J'aime la solution de base de données. (+1) J'irai probablement pour celui-ci. Et si je veux que l'exécution soit instantanée? Pour écrire une sorte de serveur d'application basé sur le Web? – Radek

+1

@Radek Si vous voulez que l'exécution soit instantanée _without_ avec exec(), vous devriez faire en sorte que le script Ruby vérifie la base de données plus souvent, peut-être toutes les 3-5 secondes. Si vous avez plus de contrôle sur le serveur, vous pouvez utiliser [Resque] (https://github.com/blog/542-introducing-resque) au lieu de MySQL pour une gestion de file d'attente vraiment efficace. – kijin

2

Si j'étais vous, je gérer tous les trucs rubis du Cron. Faites une file d'attente dans la base de données pour remettre les requêtes utilisateur puis faites en sorte que le script (en ruby?) Invoqué par cron récupère tous les travaux non traités de la file et commencez à les exécuter, puis supprimez le job de la file d'attente. c'est fait). De cette façon, vous n'avez pas besoin d'appeler exec qui, dans la plupart des cas, sera hors limites, sauf si l'utilisateur s'exécute sur un serveur VPS/Dedicated où il a un accès root.

Vous pouvez également faire un travail séparé et avoir poll la DB pour les emplois non transformés plus régulièrement que la tâche principale ... si nécessaire.

encore, cela pose la question ... pourquoi Ruby utilisation dans un blog php/CMS app ??????

+0

alors est-ce que ça marche d'exécuter le script ruby ​​de cron à chaque minute? il semble donc qu'il a été déclenché à partir du plugin Wordpress? – Radek

+0

Toutes les quelques minutes devraient être ok ... Quel que soit l'intervalle avec lequel vous allez - rappelez-vous que vous allez frapper la DB avec une requête à chaque fois de sorte qu'il va faire partie de la charge globale sur la base de données. – prodigitalson

+0

ok, alors il y a une autre question. Dois-je utiliser Wordpress db pour la file d'attente des tâches ou autre chose? Peut-être qu'il y a quelque chose de moins cher – Radek

Questions connexes