python 如何在运行Apache的Flask应用程序中使用'venv' os.environ变量?

9vw9lbht  于 2023-02-07  发布在  Python
关注(0)|答案(1)|浏览(152)

我有一个 flask 测试网站,我想使用的os.environ变量从venv或从Apache的SetEnv,但我不能弄清楚。
app.py:

from flask import Flask
import os

app = Flask(__name__)

#app.config.from_object('site3.default_settings')
#app.config.from_envvar('SITE3_SETTINGS')

#app.config.from_prefixed_env()
password = "test"
password = os.environ

@app.route('/')
def home():
        my_env_var = os.environ.get('MY_ENV_VAR')
        return f"3. site!!:{my_env_var} BU BIR FLASK UYGULAMASIII!!<br> Şifre: {password}\n"

旋度输出为:3.网站!!:没有布比尔瓶乌伊古拉马西尔!!
环境(“'APACHE_RUN_DIR':“/var/运行/apache 2”、“系统执行PID”:“20419”,“APACHE_PID_文件”:“/var/运行/apache 2/apache2.pid”,“日志流”:“8:128103”,“路径”:'/usr/本地/子文件夹:/usr/本地/子文件夹:/usr/子文件夹:/子文件夹:/子文件夹:/快照/子文件夹','调用标识':“9afa 423 a83864973 b497217939 a094 fc”、“高速缓存锁定目录”:“/变量/锁/apache 2”,“语言”:“C”、"Apache_运行_用户“:“www-data”、“Apache运行组”:“www-data”、“APACHE日志目录”:“/变量/日志/apache 2”、“PWD”:“/”、“主页”:“/var/www'})
Apache配置:

<VirtualHost *:80>
        ServerName site3.com
        ServerAlias www.site3.com

        SetEnv SECRETT "devet"
        SetEnv MY_ENV_VAR value
        SetEnv ENVTYPE production

        WSGIDaemonProcess flaskapp user=www-data group=www-data threads=5 python-home=/var/www/site3/venv
        WSGIScriptAlias / /var/www/site3/app.wsgi

        SetEnv SECRETT denet
        SetEnv MY_ENV_VAR valuee

        <Directory /var/www/site3>
                WSGIProcessGroup flaskapp
                WSGIApplicationGroup %{GLOBAL}
                Order deny,allow
                Allow from all
        </Directory>

        Alias /static /var/www/site3/static

        <Directory /var/www/site3/static/>
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/www/site3/logs/error.log
        CustomLog /var/www/site3/logs/access.log combined

</VirtualHost>

app.wsgi:

import sys

sys.path.insert(0, '/var/www/site3')
#activate_this = '/var/www/site3/venv/bin/activate'
#with open(activate_this) as file:
#       exec(file.read(), dict(__file__=activate_this))

from app import app as application

if __name__ == "__main__":
        application.run()

这是我的第一个问题,我正在努力学习。谢谢大家。
当我使用“flask run”和curl localhost:5000时,一切都像我预期的那样工作。

rt4zxlrg

rt4zxlrg1#

将.env文件添加到项目中,并加载所有作为环境变量找到的变量,例如:

# this is your .env file

DATABASE_URL = postgresql... etc

然后pip安装python-dotenv

pip install python-dotenv

然后在应用设置中使用load_dotenv()

from dotenv import load_dotenv
import os
# then call load_dotenv() when creating your app
def create_app():
    app = Flask(__name__)
    load_dotenv()
    ... 
    # call your variables as follows:
    DATABASE_URL = os.getenv("DATABASE_URL") # defined in .env
    ...
    return app

当执行应用程序时,添加app:create_app()作为参数,例如使用gunicorn,在docker入口点上,您的脚本如下所示:

exec gunicorn --bind 0.0.0.0:80 "app:create_app()"

尝试添加到你在app.wsgi中定义应用程序的地方

相关问题