2017-09-10 2 views
0

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?

Antwort

0

Das Problem war mit den Rechten oder Zeilenenden der fcgi-Datei. Das Hochladen von Windows auf den Server und das Setzen von chmod 755 funktioniert nicht. Nur das Erstellen der Datei auf dem Server und das Ausführen von chmod 755 funktionierte für mich.