2016-06-24 29 views
8

Ho riscontrato questo problema con i binari 5 rc1. Qualcuno ha idea di come configurarlo nei file dell'ambiente e qual è la dimensione del pool di connessione predefinita per il record attivo di rails 5.Pool di connessione per binari 5

Puma caught this error: could not obtain a connection from the pool within 5.000 seconds (waited 5.000 seconds); all pooled connections were in use (ActiveRecord::ConnectionTimeoutError) 
    /home/bsethi/.rvm/gems/ruby-2.2.2/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/abstract/connection_pool.rb:202:in `block in wait_poll' 
    /home/bsethi/.rvm/gems/ruby-2.2.2/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/abstract/connection_pool.rb:193:in `loop' 
    /home/bsethi/.rvm/gems/ruby-2.2.2/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/abstract/connection_pool.rb:193:in `wait_poll' 
    /home/bsethi/.rvm/gems/ruby-2.2.2/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/abstract/connection_pool.rb:154:in `internal_poll' 
    /home/bsethi/.rvm/gems/ruby-2.2.2/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/abstract/connection_pool.rb:278:in `internal_poll' 
    /home/bsethi/.rvm/gems/ruby-2.2.2/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/abstract/connection_pool.rb:148:in `block in poll' 
+0

Entrambe le risposte sono corrette, ma c'è un modo per inserirlo nel file di configurazione? – sethi

+0

Ho aggiornato la mia risposta. In sostanza è solo la continuazione della risposta di @Alessandro Caetano. – retgoat

risposta

8

In tutte le versioni rotaie che avevo usato pool di connessione configurato in config/database.yml

development: 
    adapter: sqlite3 
    database: db/development.sqlite3 
    pool: 5 
    timeout: 5000 

Così appena aumentarla:

development: 
    adapter: sqlite3 
    database: db/development.sqlite3 
    pool: 10 
    timeout: 5000 

farmi sapere se sarà utile .

UPDATE

a quanto pare non è così semplice da mettere i valori di ambiente/*. File rb. Il modo più vicino con cui IMHO usa le variabili ENV come suggerisce @Alessandro Caetano.

Comunità ha un gioiello per tali operazioni: rais-dotenv

Si potrebbe semplicemente creare .env.* file per ogni ambiente e quindi dotenv lo caricherà di conseguenza.

Ecco un esempio:

# .env.development 
main_db_database=main_db_development 
main_db_pool=5 
main_db_host=localhost 
main_db_port=3306 
main_db_user=user 
main_db_password=password 

Poi, nel tuo database.tml

development: &main_db 
    adapter: mysql2 
    encoding: utf8 
    reconnect: true 
    database: <%= ENV['main_db_database'] %> 
    pool: <%= ENV['main_db_pool'] ? ENV['main_db_pool'].to_i : 5 %> 
    host: <%= ENV['main_db_host'] %> 
    port: <%= ENV['main_db_port'] %> 
    username: <%= ENV['main_db_username'] %> 
    password: <%= ENV['main_db_password'] %> 
+1

'.to_i' non sembra essere necessario per le dimensioni del pool https://github.com/rails/rails/blob/4-2-stable/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb# L243 – typeoneerror

4

È possibile impostare il limite di pool di connessioni nella configurazione/database.yml, in questo modo:

production: 
    url: <%= ENV["DATABASE_URL"] %> 
    pool: <%= ENV["DB_POOL"] || ENV['RAILS_MAX_THREADS'] || 5 %>