首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ActiveRecord::ConnectionNotEstablished没有用于X的连接池

ActiveRecord::ConnectionNotEstablished没有用于X的连接池
EN

Stack Overflow用户
提问于 2015-06-25 22:31:42
回答 1查看 10.1K关注 0票数 16

我无法让托管在heroku上的sinatra/ruby应用程序正常工作。我摆弄了一些设置,试图解决这个问题,但到目前为止还没有结果。

代码语言:javascript
复制
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'

User是我的ActiveRecords表之一,应用程序失败,因为我试图查询它。

我使用sinatra和puma备份。这是我的Procfile:

代码语言:javascript
复制
web: ruby app/my-server.rb -s puma

我还检查了有多少打开的连接正在使用:

代码语言:javascript
复制
select count(*) from pg_stat_activity where pid <> pg_backend_pid()  and usename = current_user; 

但它每次都显示为0。

我在herokupostgres的免费计划和开发计划上托管应用程序。

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

我使用的是Rails 4.2.1和Postgres 9.4

下面是我的database.yml:

代码语言:javascript
复制
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计划在它上面卡住了?

EN

回答 1

Stack Overflow用户

发布于 2015-07-14 19:31:16

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

代码语言:javascript
复制
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_POOLMAX_THREADS的heroku配置。

代码语言:javascript
复制
heroku config:set DB_POOL=5

代码语言:javascript
复制
heroku config:set MAX_THREADS=5
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31053336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档