Python CGI checklist: Difference between revisions
m (Michael Murtaugh moved page Python CGI Checklist to Python CGI checklist) |
|||
Line 61: | Line 61: | ||
=== Check the webserver's error log === | === Check the webserver's error log === | ||
Use a shell on the server machine (so ssh to pzwart if that's where you're running) and: | |||
tail /var/log/apache2/error_log | tail /var/log/apache2/error_log |
Revision as of 11:43, 13 May 2013
"Internal server error" got you down... no problem, just check the following
Use extension ".cgi"
The default extension for CGI on a web server is .cgi.
She-Bang!
The very first line of the file should be the "shebang" telling the system (Apache) how to run the script (in other words which language it is).
#!/usr/bin/python
Even better, you could use the "env" trick (finds whatever python is available) + also specify a text encoding while you're at it (in case your code has special characters in it)
#!/usr/bin/env python
#-*- coding:utf-8 -*-
chmod +x
Permissions must be set to "world-executable". You can maybe set this via an (s)ftp program, but the simplest / most failsafe way is directly via the shell:
chmod +x myscript.cgi
or
chmod 755 myscript.cgi
Print the Content-type
The first output of your script must be the "HTTP headers", which at the very least should be a Content-type (with optional character set) followed by a blank line (which terminates the headers section). After that, all output is considered the "contents" of the document.
print "Content-type: text/html;charset=utf-8"
print
Troubleshooting
Make sure you're view the script through HTTP / a web server
If you're seeing the actual source code of the script, you need to make sure that you are viewing the script via a webserver (not just opening the script directly as a file). In other words, the URL should start with "http:" not "file:".
http://localhost/cgi-bin/script.cgi http://pzwart3.wdka.hro.nl/~YOU/cgi-bin/script.cgi
not
file:///this/can't/be/right/script.cgi
And if this doesn't work, make sure your webserver is running (Mac OS X: System Preferences, Sharing, Personal Web Sharing should be switched on).
Display python errors in the browser
Once the script is actually running, there might of course be something wrong in the code of the program itself. By default, if a python exception occurs, you will see either an Internal Server Error or (worse) a blank page. The cgitb module (CGI Trackback) will make python errors appear, and even formats them for a browser.
import cgitb; cgitb.enable()
Check the webserver's error log
Use a shell on the server machine (so ssh to pzwart if that's where you're running) and:
tail /var/log/apache2/error_log
or maybe..
tail /var/log/httpd/error_log