自我更新 PHP+MySQL 应用程序的最佳实践是什么?

2022-08-30 15:20:18

现在,桌面应用程序进行自我更新是非常标准的做法。在Mac上,在我的书中使用Sparkle的每个非Apple程序都是立即获胜的。对于Windows开发人员来说,这已经被详细讨论过了。我还没有找到有关自我更新Web应用程序的信息,我希望您能提供帮助。

我正在构建一个Web应用程序,该应用程序旨在像Wordpress或Drupal一样安装 - 将其解压缩到一个目录中,点击一些安装页面,然后就可以开始了。为了具有广泛的服务器兼容性,我被要求使用PHP和MySQL - 这是**MP吗?无论如何,它必须是广泛的跨平台。对于上下文,这基本上是适用于小型企业的统一 Web 消息传递应用程序。它不是另一个CMS平台,想想网络邮件。

我想知道有关自我更新的Web应用程序的信息。首先,(1)这是一个坏主意吗?从Wordpress 2.7开始,自动更新是一个按钮,这似乎很容易,但我可以想象有很多方法可能会变得非常非常错误。另外,Web文件可由Web进程写入的想法难道不是一个安全漏洞吗?

(2)值得开发时间吗?世界上可能有数百万个WP安装,因此WP团队花费时间使其变得容易可能是值得的,从而在全球范围内节省了数百万工时。我只能想象我的软件安装几千次 - 构建自我升级是否值得时间投入,或者我可以假设足够复杂的用户首先可以下载和安装Web软件可以通过升级清单?

如果这不是安全灾难或浪费时间,那么(3)我正在寻找以前做过的人的建议。您是否在数据库中保留了版本表?如何管理数据库升级?在自我更新的 Web 应用程序的上下文中回滚部分升级的方法是什么?使用ORM层是否使它更容易或更难?你是保留版本更改的增量,还是每次都吹掉整个事情?

我感谢您对此的看法。


答案 1

坦率地说,它确实取决于您的用户群。有大量的PHP应用程序不会自动升级自己。他们的用户要么技术足够处理升级过程,要么就是不升级。

我打算走两步:

1)认真问问自己,你的用户可能真正需要什么。自我更新是否会为采用率提供足够的推动力,以证明额外工作的合理性?如果你确信答案是肯定的,那就去做吧。

既然你在这里问,我猜你还不知道。在这种情况下,我的目标是步骤2:

2) 发布不带该功能的 1.0 版本。等待用户反馈。您的用户可能会立即要求更简单的升级过程,在这种情况下,您应该优先考虑它。或者,您可能会发现您的用户更关心其他一些功能。

在不询问用户的情况下猜测用户想要什么,是将大量开发时间浪费在人们实际上并不需要的东西上的好方法。


答案 2

我最近一直在考虑数据库架构更改。目前,我正在深入研究WordPress,看看他们如何处理修订版之间的数据库更改。以下是我迄今为止的发现:

$wp_db_version从 加载。此变量对应于 Subversion 修订版号,并在更改时更新。(可能通过钩子?我不确定。加载时,将从数据库中读取名为的 WordPress 选项。如果此数字不等于 ,则加载。wp-includes/version.phpwp-admin/includes/schema.phpwp-admin/admin.phpdb_version$wp_db_versionwp-admin/upgrade.php

wp-admin/includes/upgrade.php包括一个名为 的函数。 扫描(一串 SQL 查询,将从头开始创建最新的数据库架构),并将其与数据库中的架构进行比较,根据需要更改表,以使架构保持最新。dbDelta()dbDelta()$wp_queries

upgrade.php然后运行一个名为的函数,该函数在小于目标值时运行特定函数。(即,WordPress 2.5.0升级,如果数据库版本低于7499,将运行。这些函数中的每一个都运行自己的数据迁移和填充过程,其中一些过程是在初始数据库设置脚本期间调用的。很好地减少了重复的代码。upgrade_all()upgrade_NNN()$wp_db_versionupgrade_250()

所以,这是做到这一点的一种方法。


推荐