【发布时间】:2010-11-26 08:35:22
【问题描述】:
我有一个 Ruby 脚本,用于执行一些 API 调用/屏幕抓取,但我们的主要应用程序是 PHP。我们的 PHP 应用程序使用 shell_exec() 来调用 Ruby 脚本。
ruby 脚本在从命令行调用时效果很好——但是当通过 PHP 的 shell exec 调用时,它会随机提前退出。
这是一个 Ruby 脚本的示例:
#!/usr/bin/env ruby
require 'rubygems'
require 'mysql'
require 'net/http'
require 'open-uri'
require 'uri'
require 'cgi'
require 'fileutils'
# Bunch of code here ... works fine
somePath = 'http://foo.com/bar.php'
# Seems to always exit when I do a Net::HTTP or open-uri call
post = Net::HTTP.post_form(URI.parse(somePath),{'id'=>ID,'q'=>'some query'})
data = post.body
# OR
data = open(somePath).read
# More code here ...
所以,到目前为止,我所能推断的是,当我尝试通过 net/http 或 open-uri 调用获取/读取外部 URL 时,它总是退出。我正在抓取的页面可以接受 POST 或 GET 请求,但它似乎正在以任何一种方式退出。
我在调用 shell_exec 后使用 PHP 输出结果,但没有错误消息或退出。我的 Ruby 脚本确实输出了带有“puts ....”的消息。这可能是个问题吗(我在想“不”,因为它不会在之前的 puts 消息中退出)?
同样,当从 shell 调用时它工作正常。这几乎就像 shell_exec 调用没有等待 net/http 调用完成一样。
有什么想法吗?
【问题讨论】: