如何让线程在ruby CGI中工作

时间:2013-10-11 05:52:02

标签: ruby multithreading cgi

我有以下脚本(ruby 1.9.3),如果我注释掉两个Thread行它工作正常,如果我留下它我在我的web服务器上得到500内部错误。为什么这在CGI中不起作用,但在命令行上工作正常?

#!/usr/bin/ruby
require 'rubygems'
require 'cgi'

print "Content-type: text/html\n\n"
TIMEOUT = 8

def worker(data, results)
        results[data] = rand(6)
end

if __FILE__ == $PROGRAM_NAME
        results = {}
        worker("abc", results)
        t = Thread.new{ worker("xyz", results) }
        t.join(TIMEOUT)
        print results
        print "done"
end

1 个答案:

答案 0 :(得分:0)

我首先从您的网络服务器查看错误日志,希望看到导致501的原因。我在我的服务器上尝试了这个并且它按预期工作。

也许网络服务器正在启动不同的红宝石或无法找到宝石。

如果您在错误日志中看不到它,您可以尝试使用rescue来捕获错误,即:

begin
    t = Thread.new{ worker("xyz", results) }
    t.join(TIMEOUT)
rescue => e
    puts e.inspect
end