数据库
首页 > 数据库> > mysql – 如何在Passenger分配工作进程后重置Datamapper连接?

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