我已经将 Flask Web 应用程序部署到运行 Ubuntu 18.04 的 Digital Ocean droplet。该 Web 应用程序只是一个登录页面,其中包含一个表单,用于将访问者的电子邮件地址添加到 Mailchimp 邮件列表中。
该 Web 应用程序在开发过程中运行良好,但在生产过程中无法提交表单。提交表单只会重新加载页面。它不会将电子邮件地址提交到邮件列表,也不会显示“感谢”页面。
在开发中,我使用默认的 Flask WSGI 服务器直接访问 Web 应用程序(即 localhost:5000)。
在生产中,我将 Nginx 与 Gunicorn 结合使用。作为健全性测试,我在生产中使用 Flask 的默认 WSGI 服务器运行了该应用程序,并且运行良好。
除了使用 Nginx 和 Gunicorn 之外,Web 应用程序代码和配置(例如 Mailchimp 列表 id / api 密钥)在两个环境中是相同的。
什么原因导致了这个问题?
答案1
问题是由于没有从我的.flaskenv
文件中读取 Mailchimp API 密钥造成的。
在开发中,该文件似乎.flaskenv
由 python-dotenv 隐式加载,但在生产中您需要明确加载该文件。
import os
from dotenv import load_dotenv
# explicitly load .flaskenv
basedir = os.path.abspath(os.path.dirname('__file__'))
load_dotenv(os.path.join(basedir, '.flaskenv'))
class Config(object):
SECRET_KEY = os.environ.get('SECRET_KEY')
MAILCHIMP_API_KEY = os.environ.get('MAILCHIMP_API_KEY')
MAILCHIMP_LIST_ID = os.environ.get('MAILCHIMP_LIST_ID')