web-dev-qa-db-ja.com

ActiveRecord :: ConnectionNotEstablished-Xの接続プールがありません

Herokuでホストされているsinatra/Rubyアプリを希望どおりに動作させることができません。私はこの問題を解決しようとしていくつかのセットアップをいじりましたが、これまでのところ結果はありません。

ActiveRecord::ConnectionNotEstablished - No connection pool for User:
2015-06-25T14:26:11.736854+00:00 app[web.1]:    /app/vendor/bundle/Ruby/2.0.0/gems/activerecord-4.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:566:in `retrieve_connection'
2015-06-25T14:26:11.736856+00:00 app[web.1]:    /app/vendor/bundle/Ruby/2.0.0/gems/activerecord-4.2.1/lib/active_record/connection_handling.rb:113:in `retrieve_connection'
2015-06-25T14:26:11.736858+00:00 app[web.1]:    /app/vendor/bundle/Ruby/2.0.0/gems/activerecord-4.2.1/lib/active_record/connection_handling.rb:87:in `connection'

ユーザーは私のActiveRecordsテーブルの1つであり、クエリを実行しようとしたためアプリが失敗します。

私はプーマのバックアップでシナトラを使用しています。これが私のProcfileです:

web: Ruby app/my-server.rb -s puma

また、使用している開いている接続の数も確認していました。

select count(*) from pg_stat_activity where pid <> pg_backend_pid()  and usename = current_user; 

しかし、それは毎回0と言います。

私はherokupostgresの無料プランと開発プランでアプリをホストしています。

また、短い時間間隔でapiへのクイック呼び出しが2回ある場合に、問題が発生することにも気づきました。最初の呼び出しが成功し、2番目の呼び出しが失敗するため、使用可能な接続は5つではなく1つだけだったように。 database.ymlで、プールを5に設定します。

私はRails 4.2.1およびPostgres9.4

これが私のdatabase.ymlでもあります:

default: &default
  adapter: postgresql
  encoding: utf8
  pool: 5
  timeout: 5000

production:
  <<: *default
  Host: my_db_address
  port: 5432
  database: my_db_name
  username: my_db_user_name
  password: my_db_password

< test and development ommited >

一部の構成を見逃したり、無料のherokuプランがチョークしたりしますか?

16
Jacek Kwiecień

Sinatraアプリがどのように接続を確立したかを確認してください

configure :production, :development do
  db = URI.parse(ENV['DATABASE_URL'] || 'postgres://localhost/mydb')
  pool = ENV["DB_POOL"] || ENV['MAX_THREADS'] || 5
  ActiveRecord::Base.establish_connection(
        adapter:  db.scheme == 'postgres' ? 'postgresql' : db.scheme,
        Host:      db.Host,
        username:  db.user,
        password:  db.password,
        database:  db.path[1..-1],
        encoding:  'utf8',
        pool:      pool
  )
end

プールが適切に設定されていることを確認し、DB_POOLまたはMAX_THREADSのheroku構成があることも確認してください。

heroku config:set DB_POOL=5

または

heroku config:set MAX_THREADS=5
4
Ojash