为什么 django sqlite3 数据库在一台机器上与另一台机器上的工作方式不同?

Ben*_*ick 3 database sqlite django heroku django-models

我正在学习 Django,但我遇到了一个问题,我的数据库没有正确传输(或者它正在正确传输并且我遗漏了一些东西,这就是我认为正在发生的事情)。

我有一个Django模型Linkmodels.py

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', )
Run Code Online (Sandbox Code Playgroud)

然后我制作了这个模型的实例并确认它们被正确输入到数据库中。然后在页面的 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 %}
Run Code Online (Sandbox Code Playgroud)

在我的开发机器上,一切都按预期工作并显示: 正确的画面

然后,当我将它部署在 Heroku 上时,一切都正确构建python manage.py makemigrationspython manage.py migrate正确运行,但是当我查看页面时,它只显示以下内容:屏幕不正确

我也无法使用我在第一台机器上创建的超级用户登录到管理页面,我知道这是相关的,但我不确定如何处理它。是否有一些步骤来加载和初始化数据库或其他什么?

完整的代码是在github这里是否有帮助。

谢谢您的帮助。

小智 7

发生这种情况是因为他们的架构文件系统不适合 SQLite3,并且会定期导致根本没有数据,从而使您的数据库变空。

Heroku 开发中心有一个关于这个主题的完整页面。引用相关部分:

Heroku 的 Cedar 堆栈有一个临时文件系统。您可以写入它,也可以从中读取,但内容将被定期清除。如果您要在 Heroku 上使用 SQLite,您将至少每 24 小时丢失一次整个数据库。

即使 Heroku 的磁盘持续运行 SQLite,它仍然不适合。由于 SQLite 不作为服务运行,因此每个 dyno 将运行一个单独的运行副本。这些副本中的每一个都需要自己的磁盘支持存储。这意味着为您的应用程序供电的每个 dyno 将具有不同的数据集,因为磁盘未同步。

Heroku 建议在生产中使用 PostgreSQL,你会发现很多资源都在讨论如何在 Heroku 上使用它而不是 SQLite。

如果需要,您还可以使用支持 SQLite3 的平台 PythonAnywhere。