2012-04-06 77 views
16

ActiveRecord的线程池的大小通常我会设置池大小如何增加在Heroku

development: 
    adapter: postgresql 
    encoding: unicode 
    database: openkitchen_development 
    username: rails 
    host: localhost 
    pool: 10 
    password: 

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

回答

27

只需在您的heroku配置文件中将pool查询参数添加到DATABASE_URL即可。要设置池的大小至15日在您的Heroku应用程序使用类似:

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

+0

很好的解决方案:) – bradgonesurfing 2012-05-07 15:03:53

+1

我不明白怎么这样可行。 'DATABASE_URL'是一个在你所有的dynos和worker之间共享的配置,不会影响Rails进程的池大小。每个Heroku DB计划已经有一个最大连接限制。我怀疑调整数据库URL会增加这个限制。 – 2012-12-06 19:18:58

+1

你是对的,它不会增加数据库的最大连接限制。它所做的是告诉每个进程创建它自己的这个大小的池。所以如果你的数据库的最大conn限制为20,并且你有4个dynos,你可以设置一个5的池大小。但是你可能只需要4,因为一个进程(scheduler,heroku run等)需要一个数据库连接。 – mpoisot 2013-03-25 15:49:41

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应用与您的自定义buildpack:

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

这应该是它!

+2

这是矫枉过正 – 2012-09-25 10:08:25

3

remvee的回答到达需要什么的心脏,但因为他的命令引起了我的控制台挂,我想我会写了如何手动完成此操作。

heroku config 

查找DATABASE_URL键。在这个例子中可以说是:

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

添加“&池= 10”,将网址的结尾(?使用&,而不是因为网址中已有参数)

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

对于值得一提的是,Heroku并不推荐使用其他答案中描述的URL params方法。他们保留在任何时候重置或更改此URL的权利,无论如何,长期来看,这种行为很可能会被移除以适应Rails构建行为。

通过初始化后应用程序回调设置其他参数是修改您的heroku-postgresql数据库配置的建议方法per this dev center article

在配置/初始化/ 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