如何在不先删除 drupal 模块的情况下更新它?

How do I update a drupal module without deleting it first?

如何将新版本的模块上传到我的站点?如果我通过管理页面选择 "Install new module",我会收到一条消息,指出该模块已安装。我发现了两种变通方法,但其中 none 看起来很理想,而且是您应该采用的方法。

  1. 我可以先删除旧模块,再上传安装新版本。但是,如果模块有与之关联的数据,那么这些数据将会丢失。

  2. 我可以替换服务器上的模块文件。这似乎不是一个干净的方法,我宁愿遵循更标准的流程,如果有的话。

那么最好的方法是什么?

谢谢!

  1. 备份...以防万一。
  2. 将您的网站置于维护模式。
  3. 用更新的版本覆盖你的模块文件(先删除旧的模块文件)
  4. 运行 /update.php 来自浏览器或来自控制台 运行 drush updb 如果您安装了 drush(如果有任何类似的东西,则进行数据库更改)。
  5. 再次将您的站点置于 "normal" 模式...检查是否一切正常。

https://www.drupal.org/node/250790

MilanG在第3步的回答不正确。你没有覆盖,你需要删除现有的模块文件,然后将新的模块文件放在它的位置。这是因为新模块版本可能包含已删除的文件,有时如果这些文件未删除,您就会遇到问题。

所以...

  1. 备份(drush 站点存档)

  2. 将站点置于维护模式(drush vset maintenance_mode 0)

  3. 完全删除旧模块的目录 (rm -fr path/to/modulename)
  4. 下载最新版本的模块(drush dl 模块名)
  5. 运行 update.php (drush -y updb)
  6. 关闭维护模式(drush vset maintenance_mode 1)

使用 drush 只需编写包装器脚本并 运行 按模块编写就非常容易,这样您就可以执行 "drush update-module modulename" 和其他步骤。