If you have the following symptom:
- You use Django and Phusion Passenger in at least version 4.
- A specific request is waiting forever.
- Restarting apache has no effect.
Then you can check for the states of the current requests by using passenger-status --show requests. The output looks like this:
Version : 4.0.37 Date : 2015-10-23 15:52:11 +0200 Instance: 18806 2 clients: Client 19: host = status.vonrudorff.de uri = /dash/ connected at = 2015-10-23 15:52:02 (9 sec ago) state = FORWARDING_BODY_TO_APP session pid = 18883 (/var/www/vhosts/vonrudorff.de/status.vonrudorff.de#default) session gupid = 16fa320-twCtvOIdbmE session initiated = true requestBodyIsBuffered = false contentLength = -1 clientBodyAlreadyRead = 0 clientInput = 0x7f87c4001490 fd=19, state=END_OF_STREAM, buffer(0)="", paused=1, socketPaused=1, nextTickInstalled=0, generation=2, error=0 clientInput started = false clientBodyBuffer started = false clientBodyBuffer reachedEnd = false clientOutputPipe started = true clientOutputPipe reachedEnd = false clientOutputWatcher active = false appInput = 0x7f87c40037a0 fd=21, state=LIVE, buffer(0)="", paused=0, socketPaused=0, nextTickInstalled=0, generation=2, error=0 appInput started = true appInput reachedEnd = false responseHeaderSeen = false useUnionStation = false
If state is FORWARDING_BODY_TO_APP and connected at is suitably long ago, then this may be due to the source code of your Django app requesting a module that is not installed yet. In this case, the import error is thrown but no standard output is sent back to Phusion Passenger. Therefore, the request hangs. You can see this by looking into the log of your Django app.