使用uwsgi运行时无法访问.env文件

时间:2020-04-25 17:46:58

标签: python ubuntu flask wsgi dotenv

我正在使用smtplib发送简单的电子邮件以在Flask应用程序中进行预订,而我正在使用Google Mail,并且具有应用程序密码以及允许使用的安全性较低的应用程序。我已经在我的个人计算机上运行了预订系统,但是一旦将其移植到VPS上,它就会停止工作,原因不明,除了用户名和密码不被接受之外,但它们肯定是正确的,并且可以运行本身,但在wsgi和nginx中运行时不会。

Nginx配置

    server {
    listen 80;
    server_name example.com;
    # return 301 https://$server_name$request_uri;
    location / {
        uwsgi_pass unix:/path/too/chatbot.sock;
    include uwsgi_params;
    }
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;`

ssl_certificate /path/too/keys.pem;
ssl_certificate_key /path/too//primarykey.pem;
ssl_trusted_certificate /path/too//keys.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions

# curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
#ssl_dhparam /path/to/dhparam;

# intermediate configuration
ssl_protocols TLSv1.2;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;

# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=63072000" always;

# replace with the IP address of your resolver
resolver 8.8.8.8;
location /  {
    include uwsgi_params;
    uwsgi_pass unix:/path/too/chatbot.sock;
}

}

UWSGI.ini文件

[uwsgi]

module=wsgi:app

master = true
processes = 5
enable-threads = true



socket = chatbot.sock
chmod.socket = 666
vacuum = true

die-on-term = true

.env

DIALOGFLOW_PROJECT_ID=projectid
GOOGLE_APPLICATION_CREDENTIALS=Ajsonfile.json
RESTFUL_CREDENTIALS=restful_credentials.json
MAIL_USERNAME=example@gmail.com
MAIL_PASSWORD=apasswordforemailaddress

我目前的想法是,由于某种权限问题,wsgi或nginx也无法找到该文件,但是我已经将所有相关文件都整理好了,我的google api密钥也遇到了同样的问题

所有信息都存储在一个具有正确组访问权限的.env文件中,以及已经在该站点上运行的所有其他文件。

除了我正在使用nginx和wsgi来公开Flask应用程序外,我不知道在这里发布什么会有所帮助,有些项目存储在似乎无法读取的.env文件中。

2 个答案:

答案 0 :(得分:0)

要使其在WSGI中运行时加载它们,您需要使用dot-env软件包

from dotenv import load_dotenv, find_dotenv

load_dotenv(find_dotenv())

答案 1 :(得分:0)

[uwsgi]

base = /var/www/html/poopbuddy-api

chdir = %(base)

app = app

我不确定chdir的作用,但我认为它至少将默认位置设置为应用程序的根目录。从那里开始,load_dotenv()开始工作。