2015-06-25 37 views
16

Non riesco a far funzionare la mia app sinatra/ruby ​​su heroku come desiderato. Ho smanettato con alcune impostazioni cercando di risolvere questo problema ma finora nessun risultato.ActiveRecord :: ConnectionNotEstablished - Nessun pool di connessioni per X

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' 

L'utente è una delle mie tabelle ActiveRecords e l'app non funziona perché provo a interrogarlo.

Io uso sinatra con puma di backup. Qui è la mia Procfile:

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

ero anche controllando quante connessioni aperte non ci sta usando:

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

ma il suo dice 0 ogni volta.

Sto ospitando l'app su piano gratuito e piano di sviluppo di herokupostgres.

Ho anche notato che il problema si verifica quando ci sono 2 chiamate rapide all'api a breve intervallo di tempo. Come se ci fossero solo 1, non 5 connessioni disponibili, perché la prima chiamata ha successo e la seconda fallisce. Nel mio database.yml piscina messa a punto da I a 5.

Sono on Rails 4.2.1 e Postgres 9.4

Ecco la mia database.yml aswell:

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 > 

mi manca un po 'di configurazione o il piano di heroku libero si soffoca su di esso?

+0

Potrebbe pubblicare il tuo file di database.yml? – Tommyixi

+1

Hai taggato questo con ruby-on-rails ma non vedo alcuna menzione di Rails nella domanda, la stai usando? Se no, allora perché pensi che database.yml sia stato letto? "Per Rails 4.1+ puoi impostare questi valori direttamente nel tuo config/database.yml" https://devcenter.heroku.com/articles/concurrency-and-database-connections#threaded-servers Dai un'occhiata all'articolo collegato a Puma e prova a configurare il pool in [on_worker_boot] (https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#on-worker-boot) – iain

+0

Sono attivo Rails 4.2.1 e Postgres 9.4 –

risposta

4

Si prega di verificare come la vostra applicazione Sinatra stabilita la connessione

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 

Accertarsi che siano presenti le impostazioni corrette per la piscina, anche assicurarsi di avere una configurazione Heroku per DB_POOL o MAX_THREADS.

heroku config:set DB_POOL=5 

o

heroku config:set MAX_THREADS=5