2017-09-10 1 views
0

apache prodcution 서버에 플라스크 응용 프로그램을 설치하고 싶습니다. 다음에있는 fcgi 파일로 리디렉션해야Python flask & fast-cgi on apache - 500 내부 서버 오류 (스크립트 헤더가 너무 일찍 끝남)

<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> 

(설정은 755 chmod를하는) : 나는 다음의 .htaccess 파일을 만든

#!/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() 

다음 플라스크 응용 프로그램을 시작한다 대가로 어떤 :

#!/usr/bin/env python2.7 
# -*- coding: utf8 -*- 

from flask import Flask 
app = Flask(__name__) 

@app.route("/") 
def hello(): 
    return "Hello World!" 

하지만 웹 사이트에 액세스하려고하면 내부 서버 오류 500이 표시됩니다. 그리고 다음 줄은 아파치 오류 로그에 표시 :

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! 

내가 헤더 보라 : 나는 "python2.7의 runFlaskApp.fcgi"와 함께있는 fcgi 파일을 실행하면

[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 

는 다음과 같은 반환 오류는 WSGIServer의 컨텍스트에서 실행되지 않기 때문에 발생합니다.

나는 형식이 틀린 코드 행을 추가하여 이미 플라스크 앱에서 예외를 유발하려고했습니다. 하지만 아파치 오류 로그에 예외가 나타나지 않습니다. 이것은 플라스크 앱이 fcgi 스크립트로로드되지 않았 음을 믿게합니다.

더 이상 디버깅 할 방법이 있습니까? 아니면 누구든지이 문제에 대한 해결책을 알고 있습니까?

답변

0

문제는 fcgi 파일의 권한 또는 줄 끝과 관련이 있습니다. Windows에서 서버로 업로드하고 chmod 755를 설정하면 작동하지 않습니다. 서버에서 파일을 만든 다음 chmod 755를 실행하면 저에게 도움이되었습니다.