• en
  • Language: ru
  • Documentation version: 1.1.x

CGI

Если все другие методы развертывания не работают, CGI будет работать наверняка. CGI поддерживается всеми основными серверами, но обычно имеет неоптимальную производительность.

Таким же образом можно использовать приложение Flask на Google’s App Engine, где выполнение происходит в CGI-подобной среде.

Осторожно

Пожалуйста, убедитесь заранее, что все вызовы app.run(), которые вы можете иметь в файле приложения, находятся внутри блока if __name__ == '__main__': или перенесены в отдельный файл. Просто убедитесь, что это не вызывается, потому что это всегда будет запускать локальный сервер WSGI, чего мы не хотим, если мы развернем это приложение на CGI / app engine.

При использовании CGI вам также придется убедиться, что ваш код не содержит утверждений print или что sys.stdout отменяется чем-то, что не записывается в HTTP-ответ.

Создание файла .cgi

Сначала необходимо создать файл CGI-приложения. Назовем его yourapplication.cgi:

#!/usr/bin/python
from wsgiref.handlers import CGIHandler
from yourapplication import app

CGIHandler().run(app)

Настройка сервера

Обычно есть два способа настройки сервера. Либо просто скопировать .cgi в cgi-bin (и использовать mod_rewrite или что-то подобное для перезаписи URL), либо позволить серверу указывать на файл напрямую.

В Apache, например, вы можете поместить в конфигурацию что-то вроде этого:

ScriptAlias /app /path/to/the/application.cgi

Однако на общем хостинге у вас может не быть доступа к конфигурации Apache. В этом случае файл с именем .htaccess, расположенный в публичной директории, в которой вы хотите, чтобы ваше приложение было доступно, тоже работает, но директива ScriptAlias в этом случае работать не будет:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f # Don't interfere with static files
RewriteRule ^(.*)$ /path/to/the/application.cgi/$1 [L]

Для получения дополнительной информации обратитесь к документации вашего веб-сервера.