2016-06-24 42 views
8

我遇到與軌道5 rc1此問題。有沒有人有任何想法如何在環境文件中配置它,以及rails 5活動記錄的默認連接池大小是什麼。軌道連接池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

這兩個答案都是正確的,但有沒有辦法把它放在配置文件中? – sethi

+0

我更新了我的答案。基本上說,這只是@Alessandro Caetano答案的延續。 – retgoat

回答

8

在我曾使用過配置配置的連接池中的所有軌道版本/ database.yml的

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

所以只是增加它:

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

讓我知道這是否會有所幫助。

UPDATE

看來它不是如此直白地把自己的價值觀,以環境/ *。RB文件。 恕我直言,最接近的方式是使用ENV變量作爲@Alessandro Caetano建議。

社區有這樣的操作寶石:rais-dotenv

你可以只創建.env.*文件爲每個環境,然後dotenv將相應加載它。

下面是一個例子:

# .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 
在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'在池大小上似乎沒有必要https://github.com/rails/rails/blob/4-2-stable/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb# L243 – typeoneerror

4

您可以設置連接池限制在你的config/database.yml中,像這樣:

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