python - 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 config
,我也可以看到它。
解决方案
问题的根源在于heroku ps:exec
不使用postgresql,使用sqlite。我不知道为什么文档说它连接到现有的测功机。它对我不起作用。
利用heroku run bash
推荐阅读
- vue.js - Vue注册所有用户活动-测试工具?
- c++ - 调用时删除和析构函数的区别?
- c# - 在范围内保存选中列表框
- laravel - [Vue 警告]:编译模板时出错(当我尝试将刀片命令显示为字符串时)
- api - IP 地理定位 API 是如何制作的?
- android - Android getLastLocation() 失败,客户端必须有权执行任何位置操作
- visual-studio-code - 在 VSCode 中通过缩进改变纯文本颜色
- firebase - 在没有接口的情况下在 Firestore 中对用户进行身份验证的最佳方法是什么(例如,从后端、cron 作业等)
- php - PHP路径变量加倍
- android - 空对象引用不断发生 - void android.widget.GridView.setAdapter(android.widget.ListAdapter)