ActiveRecord :: ConnectionNotEstablished - 没有X的连接池

时间:2015-06-25 14:31:42

标签: ruby-on-rails postgresql sinatra rails-activerecord puma

我无法根据需要在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表之一,应用程序失败,因为我尝试查询它。

我使用sinatra和puma备份。这是我的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的免费计划和开发计划托管该应用。

我还注意到,在短时间内有2次快速调用api时会出现问题。就像只有1个,而不是5个连接可用,因为第一次呼叫成功,第二次呼叫失败。在我的database.yml中,我将池设置为5。

关于Rails 4.2.1和Postgres 9.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计划窒息?

1 个答案:

答案 0 :(得分:4)

请检查您的sinatra应用程序如何建立连接

[[self placeholder] drawInRect:rect
                withAttributes:@{
                                 NSFontAttributeName: [UIFont systemFontOfSize:16],
                                 NSBackgroundColorAttributeName: [UIColor blueColor],
                                 NSForegroundColorAttributeName: [UIColor greenColor], //Font Color
                                 }];

确保您有适当的游泳池设置,同时确保您拥有Executor exec = new DefaultExecutor(); CommandLine cl = CommandLine.parse(command); Map<String, String> env = EnvironmentUtils.getProcEnvironment(); env.put("XYZ", "XYZ"); //own vars exec.execute(cl, env); 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 的heroku配置。

DB_POOL

MAX_THREADS