独角兽在Heroku的Resque - 我应该担心吗?

时间:2013-08-05 23:17:06

标签: ruby-on-rails heroku resque unicorn

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

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时我们应该考虑什么呢?

1 个答案:

答案 0 :(得分:0)

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

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