0

我正在使用 jRuby 和赛璐珞(默认 task_class 所以它应该是纤维)。

我将我的数据库内容包装在 ActiveRecord::Base.connection_pool.with_connection 中,但我可能在某个地方错过了它(无论如何如何找到它?)。

我有时会收到 ActiveRecord::ConnectionTimeoutError 错误,我想避免这种情况。理论上,我的 database.yml 池设置对于我拥有的线程数量应该足够高。

在(真实)线程情况下使用 ActiveRecord 的正确方法是什么?如果可能的话,当我没有明确使用 ActiveRecord::Base.connection_pool.with_connection 时,我希望避免 ActiveRecord 自动检查连接。请注意,这是一个后台应用程序,而不是为 Web 客户端提供服务的传统 Rails 应用程序。

我正在使用 jRuby 和 Rails 4 rc1。对于 DB,我在 Heroku 上使用生产级 Postgres,因此 DB 的性能应该不是问题。

4

1 回答 1

2

如果您在 Heroku 上部署您的应用程序(我在这里假设,因为您使用的是 Heroku Postgres),那么当您部署您的应用程序时,您的 database.yml 文件将被覆盖。

Heroku 注入了一个新的 database.yml,旨在解析DATABASE_URL环境变量,因此您的任何设置都不会应用于生产。

Heroku Devcenter中有一篇关于此的文章。

本质上,您需要在应用加载后更新活动记录配置并重新建立连接。这种方法的一个很好的好处是您可以轻松更改连接池而无需进行额外部署,您只需运行:

heroku config:add DB_POOL=24

并且应用程序会以新的池级别重新启动。

于 2013-06-20T12:00:29.613 回答