deployment - 使用 Capistrano 部署时如何升级 Wordpress 和插件?

标签 deployment wordpress capistrano

我希望有人可以确认以下情况是否与将更新部署到 WordPress 站点有关,如果是,您是否有关于如何最好地管理此问题的解决方案?

基础知识:

  • 我有一个本地开发 WordPress Multisite 项目
    使用 GIT 和 Capistrano 部署到远程登台和生产
    服务器。
  • 除了 uploads 和 blogs.dir 目录(在
    wp-content) 受版本控制。是的,WordPress 核心,
    主题、插件等在本地更新、提交、推送和
    部署。这意味着我必须登录并激活插件
    最初 - 它们只是通过 Capistrano 部署安装
  • 开发、暂存和生产的数据库是不同的,
    我不担心尝试同步这些

  • 我的顾虑:

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

    我的问题:
  • 我是否担心生产和登台服务器具有
    最新的代码,但缺少最新所需的任何数据库更新
    代码准确吗?
  • 如果是这样,有没有人对我如何修改 Capistrano 有任何想法
    部署代码以停用/重新激活插件?有什么变化
    在 WordPress 中,例如 3.2 到 3.3?
  • 如果 Capistrano 不是这个工具 - 我需要做更多
    通过登录管理员“手动” - 是否有维护模式
    工具/插件将在某种程度上自动停用/激活
    插件所以激活后会触发任何更新?

  • 非常感谢,

    马特

    最佳答案

    需要注意的是,当您将 WordPress 核心从一个版本升级到另一个版本时,您不需要激活和停用插件。 Here is an explanation from Ryan Boren on why .但是,根据插件的不同,其中一些可能会在升级过程中内置升级过程 - 即插件的升级,而不是 WordPress 的升级。尽管如此,我还是会回答你的三个问题,并尽可能直接地回答它们。

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

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

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

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

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

    但是,您可能需要在诸如您的部署环境中单独停用/激活,因为实际升级过程发生在不同的机器上,因此可能与最终使用的数据库不同。

    也许最好的做法是让您的部署脚本访问 WordPress 中插件的 URI、您编写的可以停用/激活插件的插件,或者已经执行此操作的现有插件。

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

  • activate_plugin()
  • activate_plugins()
  • deactivate_plugins()
  • validate_plugin()
  • Plugin_Upgrader class (也许)

  • 全盘看/wp-admin/includes/plugin.php文件以查看您可能会发现有用的内容。此外,在 /wp-admin/plugins.php 中实际处理管理端插件的 check out 代码- 只是为了看看它是如何完成的。您可能想要停止 deactivate_plugin使用自行清理的插件清除插件配置的 Hook ,因此请考虑传递 $silenttrue停用插件时。

    为了让这真的很流畅,你可能想要捕获 get_option('active_plugins')查看哪些插件已经被激活,并且只在这些插件上运行你的脚本(确保插件将自己排除在进程之外)

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

    应该认为从 3.2 到 3.3 的更改与任何其他更改集没有区别,因此这里所说的一切都适用。

    4. 如果 Capistrano 不是用于此的工具 - 我需要通过登录管理员来更多地“手动”执行此操作 - 是否有维护模式工具/插件可以在某种程度上自动停用/激活插件,以便进行任何更新激活时触发?

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

    关于deployment - 使用 Capistrano 部署时如何升级 Wordpress 和插件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9426156/

    相关文章:

    deployment - 如何在 kubernetes 中使用 yaml 文件删除和重新创建 pod

    django - 如何从PyCharm在远程主机上运行deploy命令?

    ruby-on-rails - 通过VPN部署Rails应用

    ruby-on-rails-3 - Capistrano 部署 Assets 预编译从不编译 Assets ,为什么?

    html - 我们可以将 CSS 用于仅比固定尺寸宽的图像吗?

    ruby-on-rails - 如何使用capistrano bundle 安装期间指定Gemfile.lock的路径

    iphone - Xcode 4.2 Developer Preview 中的链接器错误

    java - Glassfish 部署错误,并包含无信息的错误消息

    php - 如何仅在 WordPress 中运行主题激活功能?

    php - 更改 WooCommerce 购物车和结帐页面中的 'Shipping' 文本 :