Ich möchte meine Flask-App auf einem Apache-Produktionsserver einrichten. Ich habe die folgende .htaccess-Datei erstellt:Python flask & fast-cgi auf apache - 500 Interner Serverfehler (Vorzeitiges Ende der Skriptheader)
<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
<Files ~ (\.fcgi)>
SetHandler fcgid-script
Options +SymLinksIfOwnerMatch +ExecCGI
</Files>
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /fcgi-bin/runFlaskApp.fcgi/$1 [QSA,L]
</IfModule>
Welche der folgenden fcgi Datei (auf chmod 755) umleiten sollte:
#!/usr/bin/env python2.7
# -*- coding: UTF-8 -*-
RELATIVE_WEB_URL_PATH = '/app_dict'
import os
# This points to the application on the local filesystem.
LOCAL_APPLICATION_PATH = os.path.expanduser('~') + '/html/app_dict'
import sys
sys.path.insert(0, LOCAL_APPLICATION_PATH)
from flup.server.fcgi import WSGIServer
from tmain 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()
die im Gegenzug sollte die folgenden Kolben App starten:
#!/usr/bin/env python2.7
# -*- coding: utf8 -*-
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
Aber wenn ich versuche, auf die Website zuzugreifen, wird ein Interner Serverfehler 500 angezeigt. Und die folgenden Zeilen zeigen in dem Apache-Fehlerprotokoll auf:
[warn] [client 0.0.0.0] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
[error] [client 0.0.0.0] Premature end of script headers: runFlaskApp.fcgi
Wenn ich die fcgi Datei mit „python2.7 runFlaskApp.fcgi“ führen Sie es gibt die folgenden:
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
Content-Type: text/html; charset=utf-8
Content-Length: 12
Hello World!
belive ich der Kopf Fehler sind, weil es nicht im Kontext eines WSGIS-Servers ausgeführt wird.
Ich habe bereits versucht, eine Ausnahme in der Kolben-App zu provozieren, indem ich eine falsch formatierte Codezeile hinzufüge. Im Apache-Fehlerprotokoll wird jedoch keine Ausnahme angezeigt. Dies führt dazu, dass ich glaube, dass die flask-App nicht einmal vom fcgi-Skript geladen wird.
Gibt es eine Möglichkeit, dies weiter zu debuggen, oder kennt jemand eine Lösung für dieses Problem?