为什么';django sqlite3数据库在一台机器上与另一台机器上的工作方式是否相同?
我正在学习Django,但是我遇到了一个问题,我的数据库传输不正确(或者它传输正确,我缺少了一些东西,我认为这就是正在发生的事情) 我在为什么';django sqlite3数据库在一台机器上与另一台机器上的工作方式是否相同?,django,database,sqlite,heroku,django-models,Django,Database,Sqlite,Heroku,Django Models,我正在学习Django,但是我遇到了一个问题,我的数据库传输不正确(或者它传输正确,我缺少了一些东西,我认为这就是正在发生的事情) 我在models.py中有一个Django model链接 class Link(models.Model): title = models.CharField(max_length=100) alt = models.CharField(max_length=100) dest = models.CharField(max_length=1
models.py中有一个Django model链接
class Link(models.Model):
title = models.CharField(max_length=100)
alt = models.CharField(max_length=100)
dest = models.CharField(max_length=100)
image = models.FilePathField(path='static/misc/link_in_bio/img/')
def __str__(self):
title = self.title + ' Link'
return self.title
class Meta:
ordering = ('title', )
然后,我制作了该模型的实例,并确认它们已正确输入数据库。然后在页面的html中引用它们,如下所示:
{% for link in links %}
<div id="space">
<div class="w3-container">
<div class="w3-panel" style="padding: 0.06em">
<button class="block" type="button" title="{{link.title}}" onclick="window.open('{{link.dest}}')">
<img src="../{{link.image}}" alt="{{link.alt}}" style="max-height: 7em">
</button>
</div>
</div>
</div>
{% endfor %}
{%用于链接中的链接%}
{%endfor%}
在我的开发机器上,一切都完全按照预期工作,并显示:
然后,当我在Heroku上部署它时,一切都正确构建,python manage.py makemigrations
和python manage.py migrate
正确运行,但当我查看页面时,它只显示以下内容:
我也不能和我已经在第一台机器上创建的超级用户一起登录到管理页面,我知道这是相关的,但我不确定如何处理它。是否有加载和初始化数据库的步骤
github上有完整的代码,如果有帮助的话
感谢您的帮助。之所以会出现这种情况,是因为他们的体系结构文件系统不适合SQLite3,并且导致定期根本没有数据,从而使您的数据库变空
Heroku开发中心在这个问题上有自己的观点。引用相关部分:
Heroku的Cedar堆栈有一个短暂的文件系统。你可以写信给它,
你可以从中读取,但内容会被清除
定期地如果在Heroku上使用SQLite,您将失去
整个数据库至少每24小时一次
即使Heroku的磁盘是持久的,运行SQLite也不会
很合身。由于SQLite不作为服务运行,因此每个dyno都会
运行单独的运行副本。每个副本都需要自己的磁盘
后援商店。这意味着为应用程序供电的每个dyno都会
由于磁盘未同步,因此具有不同的数据集
Heroku建议在生产中使用PostgreSQL,您将在Heroku上找到很多关于如何使用PostgreSQL而不是SQLite的参考资料
如果需要,还可以使用支持SQLite3的平台Pythonywhere。在开发环境中使用postgreSQL。如果您不想弄脏您的开发环境,请尝试使用docker容器:
因此,您的开发环境将更接近生产环境(尽量使用相同的版本)。非常感谢,我认为这是Django的问题,出于某种原因,Heroku完全忘记了我的想法,尽管现在看来这似乎是罪魁祸首。赏金是你的只要我能奖励它(t减去22小时)。我很感激。
docker run --name postgres -v postgresql-data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=mysecretpassword -d postgres