CGI
If all other deployment methods do not work, CGI will work for sure. CGI is supported by all major servers but usually has a sub-optimal performance.
This is also the way you can use a Flask application on Google’s App Engine, where execution happens in a CGI-like environment.
Watch Out
Please make sure in advance that any app.run()
calls you might have in your application file are inside an if __name__ ==
'__main__':
block or moved to a separate file. Just make sure it’s not called because this will always start a local WSGI server which we do not want if we deploy that application to CGI / app engine.
With CGI, you will also have to make sure that your code does not contain any print
statements, or that sys.stdout
is overridden by something that doesn’t write into the HTTP response.
Creating a .cgi
file
First you need to create the CGI application file. Let’s call it yourapplication.cgi
:
#!/usr/bin/python from wsgiref.handlers import CGIHandler from yourapplication import app CGIHandler().run(app)
Server Setup
Usually there are two ways to configure the server. Either just copy the .cgi
into a cgi-bin
(and use mod_rewrite
or something similar to rewrite the URL) or let the server point to the file directly.
In Apache for example you can put something like this into the config:
ScriptAlias /app /path/to/the/application.cgi
On shared webhosting, though, you might not have access to your Apache config. In this case, a file called .htaccess
, sitting in the public directory you want your app to be available, works too but the ScriptAlias
directive won’t work in that case:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f # Don't interfere with static files RewriteRule ^(.*)$ /path/to/the/application.cgi/$1 [L]
For more information consult the documentation of your webserver.
© 2007–2021 Pallets
Licensed under the BSD 3-clause License.
https://flask.palletsprojects.com/en/2.0.x/deploying/cgi/