到目前为止,我正在使用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时我们应该考虑什么呢?
答案 0 :(得分:0)
Unicorn是一个分叉的多进程服务器。它在一个进程中加载您的Rails环境,然后分叉许多工作程序。使用fork
会导致它复制整个父进程,包括任何打开的数据库连接,memcache,redis等。
要解决此问题,您应该重新连接after_fork
块中的所有实时连接,如示例所示。您只需要重新连接正在使用的连接/服务。