簡體   English   中英

Flask FastCGI設置

[英]Flask FastCGI Setup

我在使用FastCGI(Uberspace)將Flask應用程序部署到Apache服務器時遇到問題。 我的基本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>

有任何提示或建議嗎? 我整天都在努力...

Apache不會立即重新加載FastCGI服務器進程。 查看有關mod_fastcgi的文檔,似乎mod_fastcgi僅在空閑期之后,一定數量的請求之后或一定時間段之后才支持重新加載。 這就是為什么您的應用程序似乎沒有更新的原因,即使從命令行運行它也可以。

要獲得您想要的行為(在每次更改時重新加載),您似乎需要將FcgidMaxRequestsPerProcessFcgidCmdOptions MaxRequestsPerProcess為1(實質上是將FastCGI設置轉換為CGI設置)。 這將在每次請求時重新加載應用程序,因此不應將其用於生產-但這將使開發更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM