可以在Thin Web应用程序中使用EM调用吗?

时间:2011-07-05 14:28:41

标签: sinatra eventmachine thin

是否可以在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

1 个答案:

答案 0 :(得分:4)

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

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

我相信,如果内存服务,你可以在实际初始化EM之前将东西添加到next_tick。