Настройка Flask FastCGI
У меня проблемы с развертыванием приложения Flask на сервере Apache с FastCGI (Uberspace). Мое приложение Hello World работает. Я установил переменную для представления индекса. Но шансы на переменную не обновят представление в браузере. При запуске процесса с python geoflask.fcgi отобразится обновленная версия (в терминале), но со следующими предупреждениями:
WSGIServer: missing FastCGI param REQUEST_METHOD required by WSGI!
WSGIServer: missing FastCGI param SERVER_NAME required by WSGI!
WSGIServer: missing FastCGI param SERVER_PORT required by WSGI!
WSGIServer: missing FastCGI param SERVER_PROTOCOL required by WSGI!
Status: 200 OK
Я использую virtualenv и мои файлы выглядят так:
мой fcgi-bin/geoflask.fcgi:
#!/home/usr/.virtualenvs/flaskenv/bin/python2.7
RELATIVE_WEB_URL_PATH = '/geoflask'
import os
LOCAL_APPLICATION_PATH = os.path.expanduser('~') + '/html/geoflask'
import sys
sys.path.insert(0, LOCAL_APPLICATION_PATH)
from flup.server.fcgi import WSGIServer
from app import app
class ScriptNamePatch(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
environ['SCRIPT_NAME'] = RELATIVE_WEB_URL_PATH
return self.app(environ, start_response)
app = ScriptNamePatch(app)
if __name__ == '__main__':
WSGIServer(app).run()
мои.htacces:
<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
<Files ~ (\.fcgi)>
SetHandler fcgid-script
Options +FollowSymLinks +ExecCGI
</Files>
</IfModule>
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /fcgi-bin/geoflask.fcgi/$1 [QSA,L]
</IfModule>
Любые намеки или предложения? Я борюсь с этим целый день...
1 ответ
Apache не перезагружает процесс сервера FastCGI немедленно. Глядя на документы для mod_fastcgi, кажется, что mod_fastcgi поддерживает перезагрузку только после периода простоя, после определенного количества запросов или после определенного периода времени. Вот почему ваше приложение не обновляется, даже если оно запускается из командной строки.
Чтобы получить желаемое поведение (перезагрузка при каждом изменении), кажется, вам нужно установить либо FcgidMaxRequestsPerProcess
или же FcgidCmdOptions MaxRequestsPerProcess
до 1 (по сути, превращая вашу настройку FastCGI в настройку CGI). Это будет перезагружать приложение при каждом запросе, поэтому его не следует использовать для производства, но это облегчит разработку.