如何从php调用ruby脚本?

时间:2010-11-09 05:06:38

标签: php ruby

我正在用php编写一个Wordpress插件,下一步就是添加到这个插件中。

添加将从网上抓取数据,发送表单等。我对这部分几乎准备就绪,因为我对Wordpress插件有任何想法 - 它是用 ruby​​使用mechanize 编码的。我还没有在php中找到类似于机械化的东西。

但我不知道从Wordpress调用我的ruby脚本的最佳方法是什么。一些任务将由cron管理。那些基于用户请求的呢?

  • php脚本仅触发 ruby​​脚本。它不会等待/需要任何来自ruby的输出
  • Wordpress插件是完全可移植的,功能强大的没有ruby 脚本。 Ruby增加了更多东西。如果有人需要它。
  • 一切都将在我的linux服务器上运行,我有root权限

3 个答案:

答案 0 :(得分:7)

依赖于Ruby的WordPress插件不可移植。如果你是唯一一个将使用它的人,那就没关系。

如果Ruby脚本需要返回一个将被调用它的PHP脚本立即使用的结果,那么exec()之类的东西是唯一的方法。确保您转义传递给Ruby脚本的任何参数;否则你会受到注射攻击。

如果Ruby脚本不需要立即返回结果(例如一些后台处理,例如缩略图生成),那么我认为最好的方法是将PHP脚插入MySQL数据库或类似的东西。 Ruby脚本可以在后台运行或从cron运行,定期检查数据库以查找新作业,并执行它需要执行的任何处理。这种方法避免了exec()的性能开销和安全性问题,并且它可以说也更具可伸缩性。 (类似的方法是让Ruby脚本监听套接字,并且你的PHP脚本将连接到套接字。但是这需要更多的工作来使它正确。)

答案 1 :(得分:2)

如果我是你,我会处理来自cron的所有红宝石。在DB中创建一个队列来处理用户请求,然后让cron调用的脚本(在ruby中?)从队列中获取所有未处理的作业并开始运行它们,然后从队列中删除该作业(或者设置某种标记为它正在完成)。这样你就不必调用exec,除非用户在具有超级用户访问权限的VPS / Dedicated服务器上运行,否则大多数情况下都会被禁用。

您还可以将此作为一项单独的工作,让它比主要工作更经常地轮询数据库以查找未处理的工作......如有必要。

然而,这引出了一个问题...为什么在php博客/ cms应用程序中使用ruby ??????

答案 2 :(得分:1)

使用exec()运行ruby解释器,为它提供ruby脚本的路径。

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