1

到目前为止,我正在使用瘦服务器。我打算切换到 Unicorn 为 web dynos 添加一些并发性,我很担心,因为我通读了这篇文章,发现了这段代码:

before_fork do |server, worker|
  # ...
 
  # 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|
  # ...
 
  # If you are using Redis but not Resque, change this
  if defined?(Resque)
    Resque.redis = ENV['REDIS_URI']
    Rails.logger.info('Connected to Redis')
  end
end

我真的不明白为什么需要这段代码,以及在使用 Resque 时是否应该添加它。

如果我使用一些 Resque 工作人员,你们认为我在切换到 Unicorn 时应该考虑什么?

4

1 回答 1

0

Unicorn 是一个分叉的多进程服务器。它在一个进程中加载​​您的 Rails 环境,然后分叉许多工作人员。Usingfork会导致它复制整个父进程,包括任何打开的与数据库、memcache、redis 等的连接。

要解决此问题,您应该重新连接after_fork块中的所有实时连接,如示例所示。您只需要重新连接您正在使用的连接/服务。

于 2013-08-06T17:58:42.050 回答