python – 为什么Flask无法从Apache(mod_wsgi)中看到我的环境变量?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 为什么Flask无法从Apache(mod_wsgi)中看到我的环境变量?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2277字,纯文字阅读大概需要4分钟。
内容图文
![python – 为什么Flask无法从Apache(mod_wsgi)中看到我的环境变量?](/upload/InfoBanner/zyjiaocheng/796/2b069a78a3c54cbeb6a2ed4070e94d6c.jpg)
我想通过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 not working as expected with 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
两个问题
>这实际上不起作用.在__init__.py中,os.envrion中没有’ENVTYPE’键.为什么不?
>我也不知道如何修复if __name__ ==’__ main__’部分,以便我可以在我的PC上运行run.py作为本地Flask应用程序.我在新的run.py中所做的工作,但只能通过调用_application而不是包装函数应用程序.因此,_application无法访问我定义的环境变量.我该如何修理这条线?
谢谢!
解决方法:
由于this tip,我解决了问题#1
Note that the Flask app is imported inside the def application block — if you import it outside of this block, you won’t be able to use the environment variables at the Flask app level or any file which is imported on application load. This is because the WSGI application hasn’t loaded at the time you import the Flask application, so it can’t pass the environment variables yet.
所以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,但是 – 我不知道如何直接调用程序(如果__name__ ==’__ main__’)并且可以访问ENVTYPE环境变量.建议仍然会受到赞赏.也许我会将这些问题分解为自己的StackOverflow问题.
内容总结
以上是互联网集市为您收集整理的python – 为什么Flask无法从Apache(mod_wsgi)中看到我的环境变量?全部内容,希望文章能够帮你解决python – 为什么Flask无法从Apache(mod_wsgi)中看到我的环境变量?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。