繁体   English   中英

为什么Flask无法从Apache(mod_wsgi)看我的环境变量?

[英]Why can't Flask can't see my environment variables from Apache (mod_wsgi)?

我想通过Apache + mod_wsgi传递环境变量,以告诉我的应用程序是在开发环境还是生产环境中运行。 (这需要在启动应用程序时发生,然后再发出任何请求。)例如:

<VirtualHost *:80>
    ...
    SetEnv ENVTYPE production
    WSGIScriptAlias /myapp  /apps/www/80/wsgi-scripts/myapp/run.py
</VirtualHost>
<VirtualHost *:8080>
    ...
    SetEnv ENVTYPE development
    WSGIScriptAlias /myapp  /apps/www/80/wsgi-scripts/myapp/run.py
</VirtualHost>

根据对“ Apache SetEnv无法与mod_wsgi正常工作 ”的答案,我安装了run.py和主要的__init__.py如下所示:

旧的run.py:

from myapp import app as application

if __name__ == '__main__':
    application.run(debug=True, threaded=True)

新的run.py:

import os
from myapp import app as _application

def application(environ, start_response):
    os.environ['ENVTYPE'] = environ['ENVTYPE']
    return _application(environ, start_response)

if __name__ == '__main__':
    _application.run(debug=True, threaded=True)

__init__.py

app = Flask(__name__)
app.config.from_object(__name__)
if os.environ.get('ENVTYPE') == 'production'
    # Setup DB and other stuff for prod environment
else:
    # Setup DB and other stuff for dev environment

两个问题

  1. 这实际上是行不通的。 __init__.py ,存在没有“ENVTYPE”键os.envrion 为什么不?

  2. 我也不知道如何解决if __name__ == '__main__'部分,以便可以在PC run.py作为本地Flask应用程序运行。 我在新的run.py有效,但是只能通过调用_application而不是wrapper函数application 结果, _application无法访问我定义的环境变量。 我该如何解决?

谢谢!

由于这个技巧,我解决了问题#1

请注意,Flask应用程序已导入def应用程序块内-如果将其导入到def应用程序块之外,则将无法使用Flask应用程序级别的环境变量或在应用程序加载时导入的任何文件。 这是因为在导入Flask应用程序时尚未加载WSGI应用程序,因此它尚未传递环境变量。

因此, run.py的工作版本为:

import os

def application(environ, start_response):
    os.environ['ENVTYPE'] = environ['ENVTYPE']
    from myapp import app as _application
    return _application(environ, start_response)

if __name__ == '__main__':
    _application.run(debug=True, threaded=True)

我仍然没有解决问题2,但是-我不知道如何直接调用程序( if __name__ == '__main__' )并可以访问ENVTYPE环境变量。 建议将不胜感激。 也许我将把这个问题分解成自己的StackOverflow问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM