我用这个类属性设置了一个类:
@@db : DB::Database = DB.open "mysql://root:root@localhost/db_name"
然后,在任何类方法中,我都可以使用@@db
:
@@db.query("select * from thing") do |rs|
rs.each do
# make object
end
end
我希望通过这种方式我只能在应用程序启动时DB.open
,而不是每次请求。这很有效......直到我运行wrk -c10
并同时测试多个连接。以下是一些错误反馈:
HTTP :: Handler封闭流上的未处理异常(IO ::错误) 0x10e69a440:*加注:NoReturn at ?? 0x10e6a8d57: * IO :: FileDescriptor + @ IO :: Buffered #read:Int32 at ?? 0x10e7030db:* MySql :: ReadPacket #read:Int32 at ?? 0x10e74d89b:* DB :: ResultSet + @ DB :: Disposable #close :( Bool | Nil)at ?? 0x10e745ba2:* DefaultController :: database:无 在 ?? 0x10e7500c4: * HTTP :: Server :: RequestProcessor #process<(OpenSSL :: SSL :: Socket :: Server | TCPSocket +),(OpenSSL :: SSL :: Socket :: Server | TCPSocket +), IO :: FileDescriptor>:Nil at ?? 0x10e6995fd: * Fiber#run:(IO :: FileDescriptor | Nil)at ??
我通过对每个请求执行此操作来“解决”问题:
DB.open("mysql://root:root@localhost/db_name") do |db|
db.query("select * from thing") do |rs|
rs.each do
# make object
end
end
end
这很有效,但表现糟糕。我做错了什么?