如何在使用Capistrano进行部署时升级Wordpress和插件?

Mat*_*att 7 deployment wordpress capistrano wordpress-plugin

我希望有人可以确认以下方案是否是部署WordPress网站更新的问题,如果是,您是否有解决方案如何最好地管理这个?

基础:

  • 我有一个本地开发WordPress Multisite项目,我使用GIT和Capistrano将其部署到远程登台和生产服务器.
  • 除了上传和blogs.dir目录(在wp-content中)之外的所有内容都受版本控制.是的,WordPress核心,主题,插件等在本地更新,提交,推送和部署.这意味着我最初必须登录并激活插件 - 它们只需通过Capistrano部署即可安装
  • 关于开发,分期和生产的数据库是不同的,我并不关心尝试同步它们

我的顾虑:

在通过管理员进行自动更新时,许多插件更新和WordPress核心也会对数据库执行更新.我在开发安装上本地更新WordPress核心和插件.这些更新的代码最终会被提交,推送和部署.但是,当部署代码时,它只是添加/删除/替换已更改的文件到登台和生产服务器.生产和暂存缺少对数据库的任何更新,因为这通常是自动更新过程的一部分 - 例如,停用,更新,激活(运行对数据库的任何更新).

我的问题:

  1. 我担心生产和登台服务器是否具有最新代码但缺少最新代码所需的任何数据库更新?
  2. 如果是这样,有没有人想过我如何修改Capistrano部署代码来停用/重新激活插件?WordPress的变化如何,例如3.2到3.3?
  3. 如果Capistrano不是这个的工具 - 我需要通过登录管理员来"手动"更多地执行它 - 是否有一个维护模式工具/插件可以在某种程度上自动停用/激活插件,以便在激活时进行任何更新被触发?

非常感谢,

马特

edd*_*oya 4

需要注意的是,当您将 WordPress 核心从一个版本升级到另一个版本时,您不需要激活和停用插件。以下是 Ryan Boren 对原因的解释。不过,根据插件的不同,其中一些可能会在升级中内置升级过程-即插件的升级,而不是 WordPress 的升级。尽管如此,我还是会仔细研究你的三个问题,并尽可能直接地回答它们。

1. 我对生产和登台服务器拥有最新代码但缺少最新代码所需的任何数据库更新的担忧是否准确?

是的,更新时,如果数据库架构发生更改,那么除非新架构存在,否则 WordPress 将无法正常运行。当尝试访问 WordPress 的管理端时,如果数据库版本低于您的 WordPress 版本预期,它会将您重定向到数据库升级页面。

$wp_db_versionWordPress在/wp-includes/version.php文件中设置一个全局调用,并维护每个迁移脚本,以将数据库从每个先前版本增量升级到下一个版本,直到版本号是最新的,如下所示。以下是常见问题解答中的一个简单列表,显示修订号如何与WordPress 版本相关联。

2. 如果是这样,有人知道如何修改 Capistrano 部署代码以停用/重新激活插件吗?

正如我上面所说,您通常不需要在核心升级后激活/停用插件,除非我认为插件特别要求您这样做。如果 WordPress 中的架构更改破坏了插件,那么插件开发人员将需要发布新版本。升级该插件时,它将被关闭并重新启动,开发人员有责任确保所有需要发生的事情都如此。

但是,您可能需要在已部署的环境(例如您的环境)中单独停用/激活,因为实际的升级过程是在不同的计算机上进行的,因此可能与最终使用的数据库不同。

也许最好的办法是让您的部署脚本命中 WordPress 中插件的 URI、您编写的用于停用/激活插件的插件或已经执行此操作的现有插件。

一些现有的插件可能会处理您所寻找的部分内容,但我认为您问题的关键组成部分是自动化,并且避免必须登录到每个环境并为每个环境升级插件,因此您自己开发一个可以做到这一点的插件正是您所需要的可能就是正确的选择。如果您使用 WordPress 已经提供的工具,则可以开发插件。

查看整个/wp-admin/includes/plugin.php文件,看看哪些内容对您有用。另外,检查/wp-admin/plugins.php中管理端实际处理插件的代码- 只是为了看看它是如何完成的。您可能希望阻止deactivate_plugin钩子使用自行清理的插件清除插件配置,因此请考虑$silenttrue停用插件时传递。

为了使这一切变得非常顺利,您可能想要查看get_option('active_plugins')哪些插件已经被激活,并且只在这些插件上运行您的脚本(确保插件将其自身排除在进程之外)

3. WordPress 的变化如何,例如 3.2 到 3.3?

从 3.2 到 3.3 的更改应该被认为与任何其他更改集没有什么不同,因此这里所说的所有内容都适用。

4. 如果 Capistrano 不是这个工具 - 而且我需要通过登录管理员来更“手动”地完成 - 是否有一个维护模式工具/插件可以在某种程度上自动停用/激活插件,以便任何更新激活后会被触发吗?

我认为 Capistrano 不会在这里承担任何繁重的工作 - 但它当然也不会妨碍。您应该只需要能够在插件中点击 URI,这样应用程序中的事情就会开始滚动。重要的是,显然所有这些功能都需要可用,因此您不能像在独立脚本中一样运行它。