如何在heroku上增加ActiveRecord线程池大小

时间:2012-04-06 15:02:25

标签: activerecord heroku connection-pooling

通常我会将池大小设置为

development:
  adapter: postgresql
  encoding: unicode
  database: openkitchen_development
  username: rails
  host: localhost
  pool: 10
  password:
在database.yml中的

。但是heroku会替换配置文件。我正在使用girl_friday来 做后台数据库工作,需要增加线程池大小。

5 个答案:

答案 0 :(得分:27)

只需将pool查询参数添加到heroku配置中的DATABASE_URL即可。要在heroku应用程序中将池大小设置为15,请使用以下内容:

heroku config -s | awk '/^DATABASE_URL=/{print $0 "?pool=15"}' | xargs heroku config:add

答案 1 :(得分:12)

对于它的价值,Heroku不推荐使用其他答案中描述的URL params方法。他们保留随时重置或更改此URL的权利,无论如何,很可能会为Rails构建行为删除此行为。

通过after-initialize应用程序回调设置其他参数是修改heroku-postgresql数据库per this dev center article配置的推荐方法。

在config / initializers / database_connection.rb中:

Rails.application.config.after_initialize do
  ActiveRecord::Base.connection_pool.disconnect!

  ActiveSupport.on_load(:active_record) do
    config = Rails.application.config.database_configuration[Rails.env]
    config['pool']              = 10
    ActiveRecord::Base.establish_connection(config)
  end
end

答案 2 :(得分:5)

答案 3 :(得分:3)

remvee的答案触及了所需要的核心,但由于他的命令导致我的控制台挂起,我想我会写下如何手动执行此操作。

heroku config

查找DATABASE_URL键。对于这个例子,我们可以说:

DATABASE_URL:            mysql2://something.example.com/stuff?reconnect=true

将“& pool = 10”添加到网址的末尾(使用&而不是?因为网址已经有参数)

heroku config:add DATABASE_URL=mysql2://something.example.com/stuff?reconnect=true&pool=10

答案 4 :(得分:2)

这不是很直接,但你可以尝试创建自己的buildpack。

你需要分叉: https://github.com/heroku/heroku-buildpack-ruby

然后修改以下内容: https://github.com/heroku/heroku-buildpack-ruby/blob/master/lib/language_pack/ruby.rb#L325-387

只需添加所需的池大小。

然后,您可以使用自定义构建包创建一个新的Heroku应用程序:

heroku create --stack cedar --buildpack https://github.com/yourgithubusername/heroku-buildpack-ruby.git

那应该是它!