mysql – 如何在Passenger分配工作进程后重置Datamapper连接?
作者:互联网
在升级我的Rails应用程序的几个部分(Ruby 1.9.2,Rails 3.0.4,Datamapper 1.1.0)并转移到Passenger Standalone之后,我们开始得到奇怪的MySQL连接错误,包括:
>场数不匹配
>查询期间与MySQL服务器的连接丢失
> MySQL服务器已经消失
然后我记得Passenger forks进程,你需要为redis,memcache等等重新打开新的连接,否则数据流会出现乱码,我发现另外post由于MySQL的相同问题而进行类似的冒险.
但我还回忆起here,Passenger自动处理数据库连接.
所以我有两个问题:
1)如何告诉DataMapper创建和使用新的数据库连接?和/或:
2)分叉乘客是否自动处理分叉数据库连接?为了叉子的缘故…;)
解决方法:
要回答#2,否,Passenger本身在分叉后不处理关闭文件句柄.你必须自己管理它,除非你的宝石为你做.
为了回答#1,我拼凑了一些我发现的东西.添加到environment.rb并让我知道它是否有效!
if defined?(PhusionPassenger)
PhusionPassenger.on_event(:starting_worker_process) do |forked|
if forked
# We're in smart spawning mode.
DataObjects::Pooling.pools.each do |pool|
pool.dispose
end
else
# We're in direct spawning mode. We don't need to do anything.
end
end
end
标签:mysql,ruby-on-rails,passenger,fork,datamapper 来源: https://codeday.me/bug/20190709/1418395.html