Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 独角兽不断失去与heroku上postgres数据库的连接_Ruby On Rails_Postgresql_Heroku_Unicorn - Fatal编程技术网

Ruby on rails 独角兽不断失去与heroku上postgres数据库的连接

Ruby on rails 独角兽不断失去与heroku上postgres数据库的连接,ruby-on-rails,postgresql,heroku,unicorn,Ruby On Rails,Postgresql,Heroku,Unicorn,我已经使用unicorn web服务器在heroku上安装了一个应用程序。 我的数据库安装在外部服务器上(不在heroku上)。我已根据需要配置了数据库的URL。 当我运行heroku控制台时,我能够成功地在服务器上运行查询。 但是,当我在unicorn启动后转到URL时,会出现以下错误: 2014-03-14T01:44:53.820853+00:00 app[web.1]: ActiveRecord::StatementInvalid (PG::ConnectionBad: connecti

我已经使用unicorn web服务器在heroku上安装了一个应用程序。 我的数据库安装在外部服务器上(不在heroku上)。我已根据需要配置了数据库的URL。 当我运行heroku控制台时,我能够成功地在服务器上运行查询。 但是,当我在unicorn启动后转到URL时,会出现以下错误:

2014-03-14T01:44:53.820853+00:00 app[web.1]: ActiveRecord::StatementInvalid (PG::ConnectionBad: connection is closed:               SELECT a.attname, format_type(a.atttypid, a.atttypmod),
2014-03-14T01:44:53.820853+00:00 app[web.1]:                      pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
2014-03-14T01:44:53.820853+00:00 app[web.1]:                 FROM pg_attribute a LEFT JOIN pg_attrdef d
2014-03-14T01:44:53.820853+00:00 app[web.1]:                   ON a.attrelid = d.adrelid AND a.attnum = d.adnum
2014-03-14T01:44:53.820853+00:00 app[web.1]:                WHERE a.attrelid = '"currencies"'::regclass
2014-03-14T01:44:53.820853+00:00 app[web.1]:                  AND a.attnum > 0 AND NOT a.attisdropped
2014-03-14T01:44:53.820853+00:00 app[web.1]:                ORDER BY a.attnum
2014-03-14T01:44:53.820853+00:00 app[web.1]: ):
2014-03-14T01:44:53.820853+00:00 app[web.1]:   app/controllers/search_controller.rb:5:in `index'
我已经按照说明进行了配置。这是我的独角兽配置

worker_processes Integer(ENV["WEB_CONCURRENCY"] || 2)
timeout 25
preload_app true

before_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end

    if defined?(ActiveRecord::Base)
      ActiveRecord::Base.connection.disconnect!
      puts 'Unicorn disconnected from database'
    end

  # If you are using Redis but not Resque, change this
  if defined?(Resque)
    Resque.redis.quit
    Rails.logger.info('Disconnected from Redis')
  end
end

after_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end

  if defined?(ActiveRecord::Base)
    config = Rails.application.config.database_configuration[Rails.env]
    config['reaping_frequency'] = ENV['DB_REAP_FREQ'] || 10
    config['pool'] = ENV['DB_POOL'] || 2
    ActiveRecord::Base.establish_connection(config)
    puts 'Unicorn connected to database'
  end

  # If you are using Redis but not Resque, change this
  if defined?(Resque)
    Resque.redis = $redis
    Rails.logger.info('Connected to Redis')
  end
end

为什么即使在成功连接之后,连接仍会关闭?(我在日志中看到连接到数据库的Unicorn。

在Rails 3+Resque中,我必须添加以下内容:

Resque.after_fork do |job|
  ActiveRecord::Base.verify_active_connections! 
end

我打赌类似的东西也会对你起作用。池中的连接正在超时,必须清除。Rails 4对此进行了更改,请参见此处

你是如何处理的?是否有任何网络设置会在特定时间(如超时)后阻止你的连接?