我正在尝试编写一个具有 websockets 的 Sinatra 应用程序。我的 Sinatra 应用程序使用 Postgres 作为后端(无需 websockets 即可完美运行)。我添加了 eventmachine
和 em-websocket
来为我的应用提供 ws 支持。除了在 x
次请求后,我得到一个 ActiveRecord ConnectionPool 超时,一切都很好。似乎 EventMachine 没有释放数据库连接,但我以前从未使用过 EM,所以我不确定该怎么做。将这四种(AR + EM + PG + Sinatra)技术结合在一起而不让一切都陷入困境的最佳方式是什么?理想情况下,寻找某种 ConnectionPool gem,它会导致 EM 在请求结束时释放 DB 连接,或者类似的东西。
最佳答案
ActiveRecord 有一个中间件 ActiveRecord::ConnectionAdapters::ConnectionManagement
可以在请求后正确关闭连接。您可以在 config.ru
中激活它(我假设您使用 config.ru
文件启动 Sinatra 应用程序。如果您不熟悉使用带有 config 的 Sinatra。 ru
在文档中有关于它的 some information)。将此行放在 require ...
下方和 run ...
上方:
use ActiveRecord::ConnectionAdapters::ConnectionManagement
关于ruby - ActiveRecord + EventMachine + Postgres + Sinatra,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17959857/