1

是否可以在 Thin 内部使用 EventMachine 调用而无需额外初始化?

目前,我有一个 Thin 运行的 Sinatra 应用程序(作为服务运行)。当我尝试使用EventMachine.connect_unix_domain时,我得到eventmachine not initialized......即使 Thin(可能是 EventMachine)正在运行。

class App < Sinatra::Base
  $sock = EventMachine.connect_unix_domain("/tmp/appsock.sock")
  # import all routes
  Dir.glob("controllers/*.rb").each { |r| require_relative r }
end
4

1 回答 1

4

我的猜测(对不起,这个盒子上没有安装 em)是问题是因为代码将在加载类时被评估。那时,thin 可能没有设置,EM 可能没有初始化。

您可以尝试将 $sock = ... 调用包装在 EM.next_tick {} 中,这应该会延迟执行,直到 EM 实际开始。

我相信,如果有记忆,您可以在 EM 实际初始化之前向 next_tick 添加内容。

于 2011-08-23T04:40:49.753 回答