当您的数据库架构发生变化时处理旧版本移动应用程序的正确方法
Posted
技术标签:
【中文标题】当您的数据库架构发生变化时处理旧版本移动应用程序的正确方法【英文标题】:Right way to handle old versions of mobile app when your database schema has changed 【发布时间】:2017-11-16 23:38:48 【问题描述】:我有一个 ionic android 移动应用程序,它连接到 ruby on rails api 服务器 这个应用程序使用 postgresql 作为数据库服务器。
每当我创建一个新功能时,我都会将 api 和新应用程序都部署到应用商店,并将 api 和应用程序的各自版本(它们有自己的版本编号顺序)。 该 api 已部署到服务器,但用户设备上的应用程序不经常更新,因此以下两种情况发生在我身上
案例 1:添加新列 发布时会出现问题,例如,我在 db 中的某些表中添加了很少的新列,以捕获相应文本字段也已添加到应用程序 UI 的附加信息。 在这里,较新版本应用的用户将按预期工作(将这 2 个信息发送到列),但旧版本不会发送这 2 个字段值
案例 2:列被删除 例如,我正在以一种主要方式重新构建应用程序,并且必须对数据库进行规范化,因为它之前效率低下,甚至会导致表等被破坏或删除几列。 在这里,旧版本的应用程序只会崩溃或无法运行。
我觉得我构建的每个业务应用程序都需要管理相同的场景,这应该是所有人的共同问题
我正在编写一些自定义逻辑,应用程序将在连接到 api 服务器时检查“更新标志”以及应用程序的版本是否设置为 强制更新以使其与 api 版本一起使用,然后应用程序将被重定向到 play/应用程序商店。
我想知道大家是如何处理这个问题的,我的做法是否正确。
是否有任何 Rails 插件或库已经解决了这个特殊问题 或帮助这样做。 我知道有很多可用的版本控制 gem,但他们不处理这个问题 [强制更新应用程序]
请指导
【问题讨论】:
【参考方案1】:我参与过一个在 Android 应用启动时调用配置 API 的项目。此 API 将提供 2 个字段:major_version
和 minor_version
。如果配置 API 中的major_version
与应用程序上的不匹配,则会弹出一个窗口,要求您强制更新应用程序。这将在启动屏幕上,因此您将无法访问应用程序的实际内容,除非您强制更新您的应用程序。如果您不希望在 2 个应用版本或 2 个 API 版本之间强制更新,您可以选择调整 minor_version
。
【讨论】:
嗨,jatin,是的,这类似于我也在构建的自定义逻辑。不同的是我使用单独的更新标志来确定应强制更新应用程序版本的位置。我没有使用次要主要版本值,因为 app 和 api 的版本序列可以独立增长,例如应用程序的版本可能是 3.2.7,而 API 的版本可能是 2.8.3。您是否看到保持主要版本的应用程序和 api 同步的任何优势..再次不知道这里的最佳实践以上是关于当您的数据库架构发生变化时处理旧版本移动应用程序的正确方法的主要内容,如果未能解决你的问题,请参考以下文章
当您的 Gemfile 需要旧版本的捆绑器时,如何“捆绑安装”?
当您的数据源是 Results 对象时,如何在表格视图中移动行?