2016-06-24 20 views
8

Tôi gặp sự cố này với đường ray 5 rc1. Có ai có bất kỳ ý tưởng làm thế nào để cấu hình nó trong các tập tin môi trường và kích thước hồ bơi kết nối mặc định cho ray 5 hồ sơ hoạt động là gì.Hồ bơi kết nối cho đường ray 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

Cả hai câu trả lời đều đúng nhưng có cách nào để đặt nó vào tệp cấu hình không? – sethi

+0

Tôi đã cập nhật câu trả lời của mình. Về cơ bản, nó chỉ là sự tiếp nối câu trả lời của @Alessandro Caetano. – retgoat

Trả lời

8

Trong tất cả các đường ray phiên bản tôi đã sử dụng hồ bơi kết nối cấu hình trong config/database.yml

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

Vì vậy, chỉ tăng nó:

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

Hãy cho tôi biết nếu nó sẽ rất hữu ích .

CẬP NHẬT

Có vẻ như nó không phải như vậy đơn giản để đặt giá trị của bạn với môi trường/*. File rb. Cách gần nhất IMHO là sử dụng các biến ENV như @Alessandro Caetano gợi ý.

cộng đồng có một viên ngọc cho các hoạt động như: rais-dotenv

Bạn chỉ có thể tạo ra .env.* file cho từng môi trường và sau đó dotenv sẽ tải nó cho phù hợp.

Dưới đây là một ví dụ:

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

Sau đó, trong database.tml bạn

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' có vẻ không cần thiết đối với kích thước hồ bơi https://github.com/rails/rails/blob/4-2-stable/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb# L243 – typeoneerror

4

Bạn có thể thiết lập các giới hạn hồ bơi kết nối trong cấu hình của bạn/database.yml, như thế này:

production: 
    url: <%= ENV["DATABASE_URL"] %> 
    pool: <%= ENV["DB_POOL"] || ENV['RAILS_MAX_THREADS'] || 5 %> 
Các vấn đề liên quan