是否可以在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
我的猜测(对不起,这个盒子上没有安装em(是因为加载类时会评估代码。此时,thin可能尚未设置,EM可能尚未初始化。
你可以试着把$sock=。。。调用EM.next_tick{},这应该会延迟执行,直到EM实际启动。
我相信,如果内存可用,您可以在EM真正初始化之前向next_tick添加内容。