Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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 Sequel在分叉时会删除带有SSL错误的连接,为什么?_Ruby_Postgresql_Nginx_Database Connection_Sequel - Fatal编程技术网

Ruby Sequel在分叉时会删除带有SSL错误的连接,为什么?

Ruby Sequel在分叉时会删除带有SSL错误的连接,为什么?,ruby,postgresql,nginx,database-connection,sequel,Ruby,Postgresql,Nginx,Database Connection,Sequel,我一直在检查,发现我的续集连接因以下错误而死亡: Sequel::DatabaseDisconnectError:PG::ConnectionBad:PQconsumeInput()SSL错误:解密失败或错误记录mac:SELECT NULL 无论是服务器(thin、puma、webrick)还是环境。经过一些实验,发现罪犯是gem文件中的gem“散弹枪”(hanami不会重新加载代码)。从散弹枪文档: 每次收到请求时,它都会分叉并加载应用程序 子进程,处理请求,然后退出子进程 当与nginx一

我一直在检查,发现我的续集连接因以下错误而死亡:

Sequel::DatabaseDisconnectError:PG::ConnectionBad:PQconsumeInput()SSL错误:解密失败或错误记录mac:SELECT NULL

无论是服务器(thin、puma、webrick)还是环境。经过一些实验,发现罪犯是
gem文件
中的
gem“散弹枪”
(hanami不会重新加载代码)。从散弹枪文档:

每次收到请求时,它都会分叉并加载应用程序 子进程,处理请求,然后退出子进程

当与nginx一起用于生产时,forked Sequel出于同样的原因会断开连接。

这可以通过以下代码进行改进,但这意味着必须在每次请求时重新连接:

SequelDB.extension :connection_validator
SequelDB.pool.connection_validation_timeout = -1
所以看来,分叉后Sequel的连接池已损坏


Sequel为什么要这样做?

当一个进程分叉时,该进程的每个副本共享用于与postgres对话的文件描述符。这不是特定于sequel的,甚至不是特定于Postgres的,尽管有些库检测到分叉并为您重新连接到db(请参见sequel问题跟踪器-简短版本,sequel不会发生这种情况)