首页 > 解决方案 > Heroku dyno 中的 DATABASE_URL 为空

问题描述

我正在尝试将我的 Django 应用程序部署到 Heroku,并为本地和 Heroku 部署进行单独配置。我目前有这个:

if 'DATABASE_URL' in os.environ:
    import dj_database_url
    DATABASES = {
        'default': dj_database_url.config(conn_max_age=600)
    }
else:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }

方法main基本上是创建一个 Selenium 实例(geckodriver)并从网页上刮掉一些东西。但是,如果我尝试使用语句在本地运行它:

heroku ps:exec

然后运行:

python3 -c 'from scraper.common import main; main()'

它打印:

Traceback (most recent call last):
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 328, in execute
    return Database.Cursor.execute(self, query, params)
sqlite3.OperationalError: no such table: scraper_listing

因为它仍在使用 SQLite 数据库。然后我以相同的方式连接到测功机并尝试:

python3 -c 'import os; os.environ'

和:

echo $DATABASE_URL

并且输出未显示 DATABASE_URL 变量。有人能帮帮我吗?

编辑:提到的 env var 在 Heroku 中设置:

Heroku 中的 DATABASE_URL

如果我运行命令heroku config,我也可以看到它。

标签: pythondjangopostgresqlheroku

解决方案


问题的根源在于heroku ps:exec不使用postgresql,使用sqlite。我不知道为什么文档说它连接到现有的测功机。它对我不起作用。

利用heroku run bash


推荐阅读