【发布时间】:2015-12-22 16:26:09
【问题描述】:
我有一个使用 Nginx HTTP 服务器和 Unicorn 应用服务器的 Rails 应用程序。当应用服务器大约 15 分钟未收到任何请求时,我收到以下错误:
OCIError: ORA-02396: 超过最大空闲时间,请重新连接
页面刷新后,页面加载正常。
我正在使用 rails 4.2.1、ruby-oci8 2.1.0 和 active-record-oracle_enhanced-adapter 1.6.0。
我对 Web 开发还比较陌生,但我认为当 oracle 连接空闲但应用服务器不知道连接错误时会发生此错误。
我每 15 分钟尝试一次 setting the reaping_frequency,但这并没有解决问题。
如何管理数据库连接并确保删除这些空闲连接?我可以设置超时以在 oracle 超时之前断开数据库连接吗?
这是我的配置/unicorn.rb
app_dir = File.expand_path("../..", __FILE__)
shared_dir = "#{app_dir}/shared"
working_directory app_dir
worker_processes 2
preload_app true
timeout 15
listen "#{shared_dir}/sockets/unicorn.sock", :backlog => 64
stderr_path "#{shared_dir}/log/unicorn.stderr.log"
stdout_path "#{shared_dir}/log/unicorn.stderr.log"
pid "{shared_dir}/pids/unicorn.pid"
before_fork do |server,worker|
if defined? ActiveRecord::Base
ActiveRecord::Base.connection.disconnect!
end
end
after_fork do |server,worker|
if defined? ActiveRecord::Base
ActiveRecord::Base.establish_connection
end
end
【问题讨论】:
标签: ruby-on-rails oracle timeout database-connection unicorn