【发布时间】:2022-07-22 11:58:25
【问题描述】:
蜂巢-
我有一个通过 Nginx 和 Gunicorn 在 Debian 11 上运行的 Flask + React 应用程序。在开发中,一切都很好,要求它使用 SQLAlchemy + SQLite 来管理数据查询。
在生产中,我的 .env 文件包含与 PostgreSQL 数据库的连接详细信息。在那之后,事情就变得很奇怪了(至少对我来说,但这可能是人们经常遇到的事情,而我在 Google 上的时间却没有出现):
- 当我在生产环境中安装应用程序并设置 .env 文件时,我执行了 flask db 升级,并将其写入 PostgreSQL 数据库(确认表存在)。
- 当我运行命令行命令在新环境中创建管理员用户时,它使用我的管理员标志在
users表上的 PostgreSQL 中创建了我的用户。 - 当我进入烧瓶外壳时,我可以从应用程序中导入 db(这只是 SQLAlchemy 的一个实例)并从 AUTH API 中导入用户。导入这些后,我可以运行 User.get.all() ,它将返回 PostgreSQL 表中的所有用户。我什至通过在数据库中手动创建该表来确保该表中有一个唯一用户,以验证它不是在两个系统中创建的。
- 当我使用 curl 访问 API 登录时,它显示
users表未找到并引用它尝试查询 SQLite。
总而言之,我无法弄清楚为什么命令行/shell 接口正确地拉入 PostgreSQL 连接,但访问 API 却退回到 SQLite。我什至不知道从哪里开始调试......即使在主应用程序中的 os_env 调用中,“从 env 中提取或退回到开发中”,我做出了退回 = 生产。
所有命令都在 venv 中执行。 Gunicorn 在同一个 venv 中运行,并通过跟踪主管为 Gunicorn 编译的日志进行验证。
我很乐意提供任何可能需要的代码,但我不确定什么是相关的,什么是不相关的。如果有帮助,原始基础是基于此样板构建的,我们刚刚扩展了 API 调用和模型,并在生产中定义了一个到 PostgreSQL 的连接字符串,但在开发中留下了 SQLite 连接字符串......应用程序的操作正常完全一样:https://github.com/a-luna/flask-api-tutorial/tree/part-6
【问题讨论】:
标签: python postgresql flask sqlalchemy