簡體   English   中英

初始化使用Apache和mod_wsgi運行的Flask應用

[英]Initialising a Flask app running with Apache and mod_wsgi

我有一個使用mod_wsgi在Apache下運行的Flask應用。 該應用程序需要做一些初始化,包括設置一些頂級變量,這些變量需要在接收請求之前在請求處理程序中可以訪問。 目前,此初始化代碼只是app.py中請求處理方法之前的頂級語句:

from flask import Flask, Response, request

<other app imports>

APP = Flask(__name__)

# initialisation code

@APP.route(<URL for request #1>)
def request_handler_1():
    # request handler code

@APP.route(<URL for request #2>)
def request_handler_2():
    # request handler code

該應用程序的wsgi文件如下所示:

#!/usr/bin/python
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/myapp")

from myapp.app import APP as application
application.secret_key = <secret key>

我注意到在收到第一個請求之前,不會調用初始化代碼。 在收到任何請求之前,如何通過mod_wsgi加載應用程序時執行初始化代碼?

這是在第一個請求上發生的,因為默認情況下,mod_wsgi僅在第一個請求到達時才加載WSGI腳本文件。 也就是說,它會延遲加載WSGI應用程序。

如果要在進程首次啟動時強制其加載WSGI應用程序,則需要告訴mod_wsgi這樣做。

如果您有如下配置:

WSGIDaemonProcess myapp
WSGIProcessGroup myapp
WSGIApplicationGroup %{GLOBAL}
WSGIScriptAlias / /some/path/app.wsgi

更改為:

WSGIDaemonProcess myapp
WSGIScriptAlias / /some/path/app.wsgi process-group=myapp application-group=%{GLOBAL}

只有在WSGIScriptAlias上同時指定了進程組和應用程序組時,而不是使用單獨的指令,mod_wsgi才可以預先知道WSGI應用程序將在哪個進程/解釋器上下文中運行,並因此預加載WSGI腳本文件。

順便說一句,如果您尚未使用mod_wsgi守護程序模式( WSGIDaemonProcess指令),並強制使用主解釋器上下文( WSGIApplicationGroup %{GLOBAL}指令),則應該使用,因為這是首選設置。

暫無
暫無

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

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