2

我有一个在 Ruby 中运行的脚本,另一个在 PHP 中运行,并且,根据我的需要,不可能使其全部以相同的脚本语言运行。

我想使用 PHP 在 Ruby 中创建一个变量。目前,我有这个代码:

PHP:

$config = fopen("config.txt","w+");
fwrite($config,$sArguments);
fclose($config);

红宝石:

while true do
file = File.new("config.txt", "r")
config = file.gets
file.close
end

PHP 将在文件中写入下一个配置,而 Ruby 将读取它并将其转换为变量。它可以工作,但是 Ruby 必须努力读取和读取文件,并且有时无法正确读取它,因此这段代码的优化非常糟糕。

有没有更快的方法将信息从 PHP 脚本传递到 Ruby 脚本?

4

2 回答 2

0

我不是 PHP 方面的专家,但我认为“如何从 Python(Python-Ruby 桥)运行 Ruby 代码”提供了一些方法来完成两种语言之间的通信。尽管该页面谈到了 Ruby-Python 通信,但我很确定其中一些建议可以针对 Ruby 和 PHP 实现。

一种解决方案是使用 XML-RPC 将简单数据类型从 PHP 传输到 Ruby。Ruby 对 XML-RPC 有原生支持,我认为 PHP 有一些库可以支持 XML-RPC。

您也可以使用管道。也就是说,您通过 Ruby 的IO.popen. 我在“使用管道进行 ruby​​-python 通信的可行性”中为 Ruby-Python 做了类似的事情,但我还没有真正评估过性能。

于 2013-03-26T02:06:50.693 回答
0

很难从给出的信息中确切地说出问题出在哪里,但是当您说 Ruby 有时无法读取时,我猜是您的 Ruby 脚本在 PHP 编写到一半时读取文件。

一个简单的解决方法是让 PHP 将其写入临时文件,然后移动或重命名临时文件,以便 Ruby 脚本可以获取它。移动/重命名是原子的,因此不可能读取半写文件。

您还可以进行一些改进:

  • 使用诸如listen gem之类的东西仅在更新时读取文件。
  • 我不确定你传递的是什么数据,但你可以使用 YAML 之类的东西作为交换格式。捕获任何解析异常并记录接收到的数据以帮助调试。

退后一步,如果您在“真正的 O/S”上,一个更简单的选择是通过 Unix 套接字使用基于消息的 IPC,假设持久性不是问题。查看“ Ruby 中的 IPC 简介”的此页面,了解有关在进程之间传递消息的示例的很好的介绍。

于 2013-03-26T01:42:21.383 回答