在更新到Rails 3.1.0.rc5与nginx的乘客有间歇性的502错误

看来,只有一个乘客实例服务请求,其他人只是服务502错误。 这会导致间歇性错误模式,因为只有针对第二个实例的请求失败。

~$ rvmsudo passenger-status ----------- General information ----------- max = 4 count = 2 active = 0 inactive = 2 Waiting on global queue: 0 ----------- Application groups ----------- /u/apps/pixie.strd6.com/current: App root: /u/apps/pixie.strd6.com/current * PID: 3179 Sessions: 0 Processed: 121 Uptime: 3m 57s * PID: 3762 Sessions: 0 Processed: 0 Uptime: 2s 

更新到Rails 3.1.0 rc5后发生这种情况

 2011/07/27 21:37:37 [error] 3125#0: *608 upstream prematurely closed connection while reading response header from upstream, client: 68.226.71.148, server: pixieengine.com, request: "GET /chats/recent HTTP/1.1", upstream: "passenger:unix:/passenger_helper_server:", host: "pixieengine.com", referrer: "http://pixieengine.com/projects/426/ide" 2011/07/27 21:38:31 [error] 3125#0: *596 upstream prematurely closed connection while reading response header from upstream, client: 76.102.14.57, server: pixieengine.com, request: "GET /chats/recent HTTP/1.1", upstream: "passenger:unix:/passenger_helper_server:", host: "pixieengine.com", referrer: "http://pixieengine.com/pixel-editor" 2011/07/27 21:39:12 [error] 3125#0: *576 upstream prematurely closed connection while reading response header from upstream, client: 68.8.173.234, server: pixieengine.com, request: "GET /chats/recent HTTP/1.1", upstream: "passenger:unix:/passenger_helper_server:", host: "pixieengine.com", referrer: "http://pixieengine.com/community/forums/1" 2011/07/27 21:39:12 [error] 3125#0: *687 upstream prematurely closed connection while reading response header from upstream, client: 201.231.103.247, server: pixieengine.com, request: "GET /chats/active_users HTTP/1.1", upstream: "passenger:unix:/passenger_helper_server:", host: "pixieengine.com", referrer: "http://pixieengine.com/projects/demo/ide" 2011/07/27 21:39:12 [error] 3125#0: *686 upstream prematurely closed connection while reading response header from upstream, client: 201.231.103.247, server: pixieengine.com, request: "GET /chats/recent HTTP/1.1", upstream: "passenger:unix:/passenger_helper_server:", host: "pixieengine.com", referrer: "http://pixieengine.com/projects/demo/ide" 

我通过切换到Unicorn解决了这个问题。

我实际上并没有弄清楚如何修复乘客,但是我能够验证它是因为从Rails 3.0.9过渡到3.1.0.rc5而打破的。

暂时的解决办法是在乘客中使用PassengerSpawnMethod保守方法,禁用分叉运行进程。