【问题标题】:Django Web App on Azure, does not pull remote sqlite3 databaseAzure 上的 Django Web App,不拉远程 sqlite3 数据库
【发布时间】:2015-09-10 04:58:50
【问题描述】:

我有一个 django Web 应用程序启动并在 Azure 上运行。现在,当远程数据库发生更改时,我无法将其拉到本地(即使 sqlite3 文件包含在项目和提交中,它也不会检测到任何更改)。如果我尝试同步或推送,远程数据库会被我的本地数据库重置/覆盖。我不能简单地使用 git ignore 技巧,因为我需要在创建新模型后推送数据库(我假设远程数据库没有我的本地迁移)有人知道如何解决这个问题吗?这是我在 settings.py 文件中的数据库设置:

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': path.join(PROJECT_ROOT, 'db.sqlite3'),
    'USER': '',
    'PASSWORD': '',
    'HOST': '',
    'PORT': '',
}
}

我的 git 忽略文件:

# Python cache
__pycache__/
*.pyc

# PTVS analysis
.ptvs/

# Build results
/bin/
/obj/

# User-specific files
*.suo
*.user
*.sln.docstates

# Auto-generated virtual environment
/env/

# Auto-generated web.config
/web.config

# Auto-collected static files folder
/static/

# Windows image file caches
Thumbs.db
ehthumbs.db

# Folder config file
Desktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Mac desktop service store files
.DS_Store

【问题讨论】:

  • 能否将您的项目结构包括在 SQLite 文件所在的位置,以及 .gitignore 文件?
  • 你确定db.sqlite3 在提交中被跟踪了吗?它是否显示在 git 正在跟踪的文件列表中?
  • 是的,我尝试在本地更改一些内容,当我向上推送时,更改也应用到了服务器上

标签: django azure sqlite


【解决方案1】:

这肯定是一个非常糟糕的主意。您的远程数据库肯定会一直更新,使用您网站用户创建的实时数据。为什么要使用来自 dev 的过时数据覆盖它?

还有这个:

我假设远程数据库没有我的本地迁移

不仅是错误的,而且完全忽略了迁移的全部意义,即您在 dev 和 prod 中运行相同的代码以保持表同步。

最后,除了玩具网站之外,sqlite 并不真正适合生产用途。使用适当的数据库,如 Postgres。

【讨论】:

  • 假设他的网络应用程序处理存储在 sqlite 数据库中的 static 数据,这对于显示国家列表等用例当然是可能的,数据较小,可以通过替换文件轻松更改。如果用例证明是合理的,SQLite 可以在生产中使用。
  • 我仍然看不到这里的用例。如果他有静态数据,最好将其存储在文件系统中,或者通过迁移在真实数据库中更新。
  • 我不想覆盖来自 dev 的实时数据。但是如果我添加新模型或编辑旧模型,我将不得不从 dev 中推高我的数据库,不是吗?
  • 不,如果您只想在数据库中创建表,您可以简单地在生产数据库上应用迁移。通常的部署管道是-更新 git repo、应用迁移、重新启动服务器。每次更新模型时,您都需要在服务器数据库上执行 ./manage.py 迁移
  • 可能做什么? Azure,如果它类似于 Heroku,会在你推送时为你运行迁移。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多