1

我在使用 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>

有什么提示或建议吗?我整天都在为此苦苦挣扎...

4

1 回答 1

2

Apache 不会立即重新加载 FastCGI 服务器进程。查看mod_fastcgi 的文档,似乎 mod_fastcgi 仅支持在空闲期、一定数量的请求或一定时间后重新加载。这就是为什么您的应用程序似乎没有更新的原因,即使当您从命令行运行它时,它也会更新。

要获得您想要的行为(在每次更改时重新加载),您似乎需要将其设置为 1FcgidMaxRequestsPerProcessFcgidCmdOptions MaxRequestsPerProcess1(本质上是将您的 FastCGI 设置变成 CGI 设置)。这将在每个请求上重新加载应用程序,因此它不应该用于生产 - 但它会使开发更容易。

于 2014-02-12T20:07:50.500 回答