是否可以在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
答案 0 :(得分:4)
我的猜测(对不起,没有在这个盒子上安装em)是因为代码将在加载类时进行评估。此时,瘦可能没有设置,EM可能没有初始化。
您可以尝试在EM.next_tick {}中包装$ sock = ...调用,这应该会延迟执行直到EM实际启动。
我相信,如果内存服务,你可以在实际初始化EM之前将东西添加到next_tick。