我正在使用jRuby和Celluloid(默认的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的性能应该不是问题。
答案 0 :(得分:2)
如果您在Heroku上部署您的应用程序(我假设您正在使用Heroku Postgres),那么部署应用程序时将覆盖您的database.yml文件。
Heroku注入了一个新的database.yml,用于解析DATABASE_URL
环境变量,因此您的设置都不适用于生产。
Heroku Devcenter中有一篇关于此内容的文章。
基本上,您需要更新活动记录配置并在加载应用程序后重新建立连接。这种方法的一个很好的好处是,您可以轻松更改连接池而无需进行额外部署,只需运行:
heroku config:add DB_POOL=24
使用新的池级别重新启动应用程序。