当前位置: 首页 > 知识库问答 >
问题:

初始化运行Apache和mod_wsgi的Flask应用程序

岳曦
2023-03-14

我有一个Flask应用程序在Apache下使用mod_wsgi运行。该应用程序需要做一些初始化,包括在接收任何请求之前设置一些需要在请求处理程序中访问的顶级变量。目前,此初始化代码只是请求处理方法之前的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加载应用程序时,如何执行初始化代码?

共有1个答案

欧阳鸿哲
2023-03-14

它发生在第一个请求时,因为默认情况下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\u wsgi才能预先知道wsgi应用程序将在哪个进程/解释器上下文中运行,从而预加载wsgi脚本文件。

顺便说一句,如果您还没有使用mod_wsgi守护进程模式(WSGIDaemonProcess指令)和强制主解释器上下文(WSGIApplicationGroup%{GLOBAL}指令),那么您应该这样做,因为这是首选设置。

 类似资料:
  • 我允许你问一个问题,我有与你的mod_wsgi在windows上的移植托管烧瓶应用程序 我有两个烧瓶申请,由于进口冲突,只有一个可以同时活着 ie:如果请求应用程序1,我有一个响应,那么如果请求应用程序2,我有内部服务器错误,日志中有错误。。。然后,如果我重新启动apache并请求应用程序2,我会有一个响应,但如果我请求应用程序1,我会有相同的内部服务器错误,如果我评论一些导入,如numpy,则两

  • 我正试图使用mod\u wsgi在Apache web服务器上部署我的flask应用程序。部署后,当我转到配置为返回简单文本消息的“healthCheck”URL时,应用程序没有响应,正在超时。 这是我的wsgi文件: 我在apache日志中也没有看到任何错误。可能是什么问题?请问我是否需要任何额外的详细信息。

  • 我想在Apache服务器上部署我的Flask应用程序。我在服务器上有一个帐户,并被告知“服务器可用于运行用Python编写的脚本和Web应用程序(使用django和mod_wsgi)”。 我在Windows上,要传输文件,我必须使用FTP客户端,所以我使用WinSCP。 安装mod_wsgi并不像我预期的那样简单,我无法在线获得任何清晰的文档。 因为服务器已经可以使用mod_wsgi运行Pytho

  • 问题内容: 我已经运行了一个基本的“ hello world” Flask应用程序。 我在使用Apache 2.4的Ubuntu 14.04上。我已经安装了mod_wsgi。 我创建了一个以容纳安装了flask的virtualenv创建的Python2。 但是,我希望我的flaskapp导入我编写的Python3.x模块。 我需要怎么做才能做到这一点? 我尝试创建一个并修改 但是我认为这还不够。这

  • 问题内容: 我正在使用Flask / Gunicorn运行Web应用程序,并且对生命周期管理有疑问。我在Java世界中拥有关于servlet的更多经验。 我正在为服务创建一个宁静的接口。该服务始终在服务器上运行,并与一组子服务器进行通信和控制。在Java中,将通过侦听器和servlet初始化方法来创建和初始化我的服务(例如,传统上在中找到的设置)。 Flask中的等效设置和配置在哪里?我正在考虑诸

  • Rails 应用的初始化过程 本章节介绍了 Rails 4 应用启动的内部流程,适合有一定经验的Rails应用开发者阅读。 通过学习本章节,您会学到如下知识: 如何使用 rails server; Rails应用初始化的时间序列; Rails应用启动过程都用到哪些文件; Rails::Server接口的定义和使用; 本章节通过介绍一个基于Ruby on Rails框架默认配置的 Rails 4 应