We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
using web2py with Passenger
I'm using web2py on [Dreamhost ](https://www.dreamhost.com/)with the recommended [Phusion Passenger](https://www.phusionpassenger.com/) as the  deployment web server.  I configured the web2py [handlers/wsgihandler.py](https://github.com/web2py/web2py/blob/master/handlers/wsgihandler.py) as recommended by Dreamhost users (adding lines to launch python in a virtual environment), creating passenger_wsgi.py.  With just these edits, Passenger reported a timeout error from the application (web2py).  

The Passenger [debugging startup page](https://github.com/phusion/passenger/wiki/Debugging-application-startup-problems) notes that Passenger uses stdout for communication with the application and assumes that it is not "closed, overwritten, or redirected" by the application.  

Web2py overwrites stdout with stderr on line 31 in wsgihandler.py.  When I comment out this line, web2py (and Passenger) startup just fine and seem to work, although I haven't done much testing beyond startup.

So, my question is, is this line necessary?  If so, is there a fix to make this setup work properly?  If web2py requires both file descriptors pointing to the same place, maybe set stderr = stdout instead?


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `handlers/wsgihandler.py`
Content:
```
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 
4 """
5 This file is part of the web2py Web Framework
6 Copyrighted by Massimo Di Pierro <mdipierro@cs.depaul.edu>
7 License: LGPLv3 (http://www.gnu.org/licenses/lgpl.html)
8 
9 
10 This is a WSGI handler for Apache
11 Requires apache+mod_wsgi.
12 
13 In httpd.conf put something like:
14 
15     LoadModule wsgi_module modules/mod_wsgi.so
16     WSGIScriptAlias / /path/to/wsgihandler.py
17 
18 """
19 
20 # change these parameters as required
21 LOGGING = False
22 SOFTCRON = False
23 
24 import sys
25 import os
26 
27 path = os.path.dirname(os.path.abspath(__file__))
28 os.chdir(path)
29 
30 if not os.path.isdir('applications'):
31     raise RuntimeError('Running from the wrong folder')
32 
33 sys.path = [path] + [p for p in sys.path if not p == path]
34 
35 sys.stdout = sys.stderr
36 
37 import gluon.main
38 
39 if LOGGING:
40     application = gluon.main.appfactory(wsgiapp=gluon.main.wsgibase,
41                                         logfilename='httpserver.log',
42                                         profiler_dir=None)
43 else:
44     application = gluon.main.wsgibase
45 
46 if SOFTCRON:
47     from gluon.settings import global_settings
48     global_settings.web2py_crontype = 'soft'
49
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/handlers/wsgihandler.py b/handlers/wsgihandler.py
--- a/handlers/wsgihandler.py
+++ b/handlers/wsgihandler.py
@@ -7,22 +7,16 @@
 License: LGPLv3 (http://www.gnu.org/licenses/lgpl.html)
 
 
-This is a WSGI handler for Apache
-Requires apache+mod_wsgi.
-
-In httpd.conf put something like:
-
-    LoadModule wsgi_module modules/mod_wsgi.so
-    WSGIScriptAlias / /path/to/wsgihandler.py
-
+This is a WSGI handler
 """
 
+import sys
+import os
+
 # change these parameters as required
 LOGGING = False
 SOFTCRON = False
 
-import sys
-import os
 
 path = os.path.dirname(os.path.abspath(__file__))
 os.chdir(path)
@@ -32,8 +26,6 @@
 
 sys.path = [path] + [p for p in sys.path if not p == path]
 
-sys.stdout = sys.stderr
-
 import gluon.main
 
 if LOGGING:

{"golden_diff": "diff --git a/handlers/wsgihandler.py b/handlers/wsgihandler.py\n--- a/handlers/wsgihandler.py\n+++ b/handlers/wsgihandler.py\n@@ -7,22 +7,16 @@\n License: LGPLv3 (http://www.gnu.org/licenses/lgpl.html)\n \n \n-This is a WSGI handler for Apache\n-Requires apache+mod_wsgi.\n-\n-In httpd.conf put something like:\n-\n-    LoadModule wsgi_module modules/mod_wsgi.so\n-    WSGIScriptAlias / /path/to/wsgihandler.py\n-\n+This is a WSGI handler\n \"\"\"\n \n+import sys\n+import os\n+\n # change these parameters as required\n LOGGING = False\n SOFTCRON = False\n \n-import sys\n-import os\n \n path = os.path.dirname(os.path.abspath(__file__))\n os.chdir(path)\n@@ -32,8 +26,6 @@\n \n sys.path = [path] + [p for p in sys.path if not p == path]\n \n-sys.stdout = sys.stderr\n-\n import gluon.main\n \n if LOGGING:\n", "issue": "using web2py with Passenger\nI'm using web2py on [Dreamhost ](https://www.dreamhost.com/)with the recommended [Phusion Passenger](https://www.phusionpassenger.com/) as the  deployment web server.  I configured the web2py [handlers/wsgihandler.py](https://github.com/web2py/web2py/blob/master/handlers/wsgihandler.py) as recommended by Dreamhost users (adding lines to launch python in a virtual environment), creating passenger_wsgi.py.  With just these edits, Passenger reported a timeout error from the application (web2py).  \n\nThe Passenger [debugging startup page](https://github.com/phusion/passenger/wiki/Debugging-application-startup-problems) notes that Passenger uses stdout for communication with the application and assumes that it is not \"closed, overwritten, or redirected\" by the application.  \n\nWeb2py overwrites stdout with stderr on line 31 in wsgihandler.py.  When I comment out this line, web2py (and Passenger) startup just fine and seem to work, although I haven't done much testing beyond startup.\n\nSo, my question is, is this line necessary?  If so, is there a fix to make this setup work properly?  If web2py requires both file descriptors pointing to the same place, maybe set stderr = stdout instead?\n\n", "before_files": [{"content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n\"\"\"\nThis file is part of the web2py Web Framework\nCopyrighted by Massimo Di Pierro <mdipierro@cs.depaul.edu>\nLicense: LGPLv3 (http://www.gnu.org/licenses/lgpl.html)\n\n\nThis is a WSGI handler for Apache\nRequires apache+mod_wsgi.\n\nIn httpd.conf put something like:\n\n    LoadModule wsgi_module modules/mod_wsgi.so\n    WSGIScriptAlias / /path/to/wsgihandler.py\n\n\"\"\"\n\n# change these parameters as required\nLOGGING = False\nSOFTCRON = False\n\nimport sys\nimport os\n\npath = os.path.dirname(os.path.abspath(__file__))\nos.chdir(path)\n\nif not os.path.isdir('applications'):\n    raise RuntimeError('Running from the wrong folder')\n\nsys.path = [path] + [p for p in sys.path if not p == path]\n\nsys.stdout = sys.stderr\n\nimport gluon.main\n\nif LOGGING:\n    application = gluon.main.appfactory(wsgiapp=gluon.main.wsgibase,\n                                        logfilename='httpserver.log',\n                                        profiler_dir=None)\nelse:\n    application = gluon.main.wsgibase\n\nif SOFTCRON:\n    from gluon.settings import global_settings\n    global_settings.web2py_crontype = 'soft'\n", "path": "handlers/wsgihandler.py"}], "after_files": [{"content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n\"\"\"\nThis file is part of the web2py Web Framework\nCopyrighted by Massimo Di Pierro <mdipierro@cs.depaul.edu>\nLicense: LGPLv3 (http://www.gnu.org/licenses/lgpl.html)\n\n\nThis is a WSGI handler\n\"\"\"\n\nimport sys\nimport os\n\n# change these parameters as required\nLOGGING = False\nSOFTCRON = False\n\n\npath = os.path.dirname(os.path.abspath(__file__))\nos.chdir(path)\n\nif not os.path.isdir('applications'):\n    raise RuntimeError('Running from the wrong folder')\n\nsys.path = [path] + [p for p in sys.path if not p == path]\n\nimport gluon.main\n\nif LOGGING:\n    application = gluon.main.appfactory(wsgiapp=gluon.main.wsgibase,\n                                        logfilename='httpserver.log',\n                                        profiler_dir=None)\nelse:\n    application = gluon.main.wsgibase\n\nif SOFTCRON:\n    from gluon.settings import global_settings\n    global_settings.web2py_crontype = 'soft'\n", "path": "handlers/wsgihandler.py"}]}