【问题标题】:Syncing local and Elastic Beanstalk database?同步本地和 Elastic Beanstalk 数据库?
【发布时间】:2016-08-22 03:55:59
【问题描述】:

我最近在 Elastic Beanstalk 上部署了一个 Django Web 应用程序。我已经对其进行了配置,以便我可以在线访问 Django 管理界面并向在线站点添加内容。

现在,该网站仍在开发中 - 我将不断进行更改和调整等。不幸的是,每次我从本地版本部署我的应用程序时,数据库 (SQLite) 都会被覆盖,并且我添加的任何内容都会被覆盖在线版本已被删除。

有没有办法从在线站点“提取”数据库(以及单独的数据库)?或者我可以告诉“部署”命令忽略数据库吗?

谢谢各位。

【问题讨论】:

  • 什么数据库引擎? MySQL、PostgreSQL?在任何情况下,您都可以像在任何地方运行的任何数据库一样执行 mysqldump/restore 之类的操作。
  • 感谢您的评论,@Mark。它只是一个 SQLite,我不知道如何在 Elastic Beanstalk 中访问数据库的在线版本。有没有办法做到这一点?
  • 如果是 SQLite,那是完全不同的情况(在原始问题中包含很好的信息)。每当您部署应用程序时,您可能需要确定某种方式来部署数据。您是否将 Beanstalk 应用程序限制为单个 EC2 实例?
  • 对此感到抱歉 - 已更新问题。我没有意识到这会是一个如此大的问题——即使需要付出很多努力,从长远来看,迁移到 MySQL 或 Postgres 会更好吗?是的,我的应用程序目前仅在一个实例上。很抱歉,我对 AWS 很陌生,还不确定它们是如何组合在一起的,所以您可能不得不使用小词。
  • 主要问题是 SQLite 是一个运行在 Web 服务器上的内存数据库,这与我认为您所说的 RDS 服务器有很大不同。是的,从长远来看,最好切换到 MySQL 或 PostgreSQL 并使用 Amazon 的 RDS 服务。

标签: python django sqlite amazon-web-services amazon-elastic-beanstalk


【解决方案1】:

正如在几个 cmets 中已经说过的那样,因为(可能)您的 SQLite 数据库是您项目目录中的一个文件,每次部署应用程序时它都会被替换/删除,这就是您在部署之间丢失所有数据的原因。

对于生产实例(特别是这些 PaaS 服务),您应该使用外部数据库(PostgreSQL、MySQL 等)。

更直接地回答您的问题,并假设您希望保持设置不变(至少在您提出问题时),我看到了两种可以在部署之间保存数据库的方法。一种是通过ssh 访问实例并获取数据库文件,另一种是使用来自django 的dumpdata 命令导出数据,然后使用loaddata 加载它。

【讨论】:

  • 我最终将我的数据库移至 MySQL 服务器,并基于此和 cmets 中的建议将生产和开发版本都指向它。谢谢。
猜你喜欢
  • 2018-12-31
  • 2019-02-08
  • 2014-03-01
  • 2019-08-06
  • 2017-07-31
  • 2011-07-27
  • 2019-07-21
  • 1970-01-01
  • 2015-06-14
相关资源
最近更新 更多