【问题标题】:Flask & SQLAlchemy - Command Line & Shell use correct database connection, but API/Curl does notFlask & SQLAlchemy - 命令行 & Shell 使用正确的数据库连接,但 API/Curl 没有
【发布时间】:2022-07-22 11:58:25
【问题描述】:

蜂巢-

我有一个通过 Nginx 和 Gunicorn 在 Debian 11 上运行的 Flask + React 应用程序。在开发中,一切都很好,要求它使用 SQLAlchemy + SQLite 来管理数据查询。

在生产中,我的 .env 文件包含与 PostgreSQL 数据库的连接详细信息。在那之后,事情就变得很奇怪了(至少对我来说,但这可能是人们经常遇到的事情,而我在 Google 上的时间却没有出现):

  1. 当我在生产环境中安装应用程序并设置 .env 文件时,我执行了 flask db 升级,并将其写入 PostgreSQL 数据库(确认表存在)。
  2. 当我运行命令行命令在新环境中创建管理员用户时,它使用我的管理员标志在 users 表上的 PostgreSQL 中创建了我的用户。
  3. 当我进入烧瓶外壳时,我可以从应用程序中导入 db(这只是 SQLAlchemy 的一个实例)并从 AUTH API 中导入用户。导入这些后,我可以运行 User.get.all() ,它将返回 PostgreSQL 表中的所有用户。我什至通过在数据库中手动创建该表来确保该表中有一个唯一用户,以验证它不是在两个系统中创建的。
  4. 当我使用 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


    【解决方案1】:

    我终于找到了答案。

    当您启动 Gunicorn 时,它会忽略您的 .env 文件以及您可能在 Shell 中设置的任何环境变量。即使您的应用专门加载了 .env 文件,Gunicorn 仍然会忽略它。

    有多种解决方案,但由于我使用的是 Supervisor 并且还需要加载大量变量,因此不能在 Gunicorn 上使用 --env 标志。

    相反,将其添加到您的 Gunicorn 文件中。由于我使用的是 virtualenv 并通过 pip 安装了它,所以我的 gunicorn 命令是从 ./project-root/venv/bin/gunicorn 运行的。

    像这样修改那个文件:

    在导入的顶部,您需要添加: 导入操作系统 从 dotenv 导入 load_dotenv

    然后,在您实际加载应用程序之前的任何地方(我将我的放在所有导入之后),添加这段代码,其中我有两个名为 .env 和 .flaskenv 的环境文件:

    for env_file in ('.env', '.flaskenv'):
        env = os.path.join(os.getcwd(), env_file)
        if os.path.exists(env):
            load_dotenv(env)
    

    【讨论】:

      猜你喜欢
      • 2018-06-13
      • 2018-02-09
      • 2018-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      相关资源
      最近更新 更多