2012-04-06 24 views
16

Normalmente avrei impostare la dimensione del pool diCome aumentare ActiveRecord dimensioni del pool di thread su Heroku

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

in database.yml. Tuttavia heroku sostituisce il file di configurazione. Sto usando girl_friday a do background db funziona e ho bisogno di aumentare la dimensione del pool di thread.

risposta

27

Basta aggiungere un parametro di query pool allo DATABASE_URL nella configurazione di heroku. Per impostare la dimensione del pool di 15 nel vostro Heroku uso app qualcosa di simile:

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

+0

bella soluzione :) – bradgonesurfing

+1

io non capisco come che funzioni. Il 'DATABASE_URL' è una configurazione condivisa tra tutti i tuoi dynos e worker e non influenza la dimensione del pool dei tuoi processi Rails. Ogni piano Heroku DB ha già un limite massimo di connessioni. Dubito che la modifica dell'URL del database aumenti tale limite. –

+1

Hai ragione, non aumenta il limite massimo di connessioni per il tuo DB.Quello che fa è dire a ogni processo di creare il proprio pool di quelle dimensioni. Quindi se il tuo DB ha un limite di connessione massimo di 20 e hai 4 dynos, potresti impostare un pool di dimensioni pari a 5. Comunque probabilmente vorrai solo 4, dal momento che uno dei processi off (scheduler, heroku run, etc) avrà bisogno di un Connessione DB. – mpoisot

2

Non è molto semplice, ma è possibile provare a creare il proprio buildpack.

Ti nee alla tavola: https://github.com/heroku/heroku-buildpack-ruby

quindi modificare la seguente: https://github.com/heroku/heroku-buildpack-ruby/blob/master/lib/language_pack/ruby.rb#L325-387

Basta aggiungere la dimensione del pool si richiede.

quindi è possibile creare un nuovo Heroku app con il tuo buildpack personalizzato:

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

Quello dovrebbe essere!

+2

questo è eccessivo –

3

risposta di remvee arriva al cuore di ciò che è necessario, ma dal momento che il suo comando ha causato la mia console per appendere ho pensato di scrivere su come per farlo manualmente.

heroku config 

cercare la chiave DATABASE_URL. Per questo esempio diciamo che è:

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

Add "& piscina = 10" al fine dell'URL (? Uso & invece di perché l'URL è già un parametro)

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

Per ciò che vale, utilizzando il metodo URL params come descritto in altre risposte qui non è raccomandato da Heroku. Si riservano il diritto di reimpostare o modificare questo URL in qualsiasi momento ea lungo termine questo comportamento sarà probabilmente rimosso per il comportamento di build di Rails, comunque.

L'impostazione di parametri aggiuntivi tramite una callback dopo l'inizializzazione dell'applicazione è il metodo consigliato per modificare la configurazione dei database heroku-postgresql per this dev center article.

in config/inizializzatori/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 
Problemi correlati