2016-06-24 7 views
8

Ich habe dieses Problem mit Schienen 5 RC1. Hat jemand eine Idee, wie man es in den Umgebungsdateien konfiguriert und was ist die Standard-Verbindung Pool-Größe für Schienen 5 aktiven Datensatz.Verbindung Pool für Schienen 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

Beide Antworten sind richtig, aber gibt es eine Möglichkeit, es in die Konfigurationsdatei zu setzen? – sethi

+0

Ich aktualisierte meine Antwort. Grundsätzlich ist es nur eine Fortsetzung von @Alessandro Caetanos Antwort. – retgoat

Antwort

8

In allen Schienen Versionen hatte ich Connection-Pool in Config konfiguriert verwendet/database.yml

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

So ist es nur erhöhen:

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

Lassen Sie mich wissen, ob es hilfreich sein .

UPDATE

Es scheint, ist es nicht so einfach ist Ihre Werte für die Umwelt zu setzen/*. Rb Dateien. Der nächste Weg IMHO ist die Verwendung von ENV-Variablen wie @Alessandro Caetano suggeriert.

Gemeinschaft hat ein Juwel für solche Operationen: rais-dotenv

könnten Sie erstellen nur .env.* Dateien für jede Umgebung und dann wird dotenv es entsprechend laden. Hier

ein Beispiel:

# .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 

Dann in Ihrem 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' scheint auf der Poolgröße nicht erforderlich zu sein https://github.com/rails/rails/blob/4-2-stable/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb# L243 – typeoneerror

4

Sie den Verbindungspool Grenze in Ihrer config/database.yml festlegen können, wie folgt aus:

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