2010-08-02 47 views
3

在为我的网站使用Drupal几个月后,我发现模块列表中的模块卸载选项卡。我应该使用模块卸载菜单吗?

我一直通过从文件系统中删除文件夹(禁用它们之后)来卸载我的模块。我想知道这是否是删除它们的错误方法。

谢谢

回答

7

当您卸载模块,而并非只是禁止和删除,你让模块清理后本身,包括:

  • 删除的表,那么创建它使用
  • 删除系统变量。

因此,卸载是一个很好的清洁,为您的数据库的健康。事情不会这么做,但为什么要将未使用的表保存在数据库中?

注:
它是由模块生成器创建做清理所需的代码,所以不是所有的模块做到这一点非常好。

1

卸载选项卡将删除与模块相关的数据库中的任何内容。该操作要求该模块仍然存在于您的模块目录中。

简单地删除这些文件并不是错误的,但它会在数据库中留下不需要的东西。卸载选项卡不会为你删除模块文件,你需要自己去做,就像你一直在做的那样。

0

您可以检查this link - 模块可能有一些额外的卸载说明对于他们,但是看起来他们大部分没有 - 这就是为什么你没有任何问题:)

有时需要
2

卸载,因为如果一个模块被禁用,hook_install()将不会触发。因此,如果例如某个模块有一些损坏的数据,禁用并重新启用将不会删除该数据。

你可能会在你的方法确定。然而,有一件事需要做的是做以下事情。

  1. 禁用
  2. 删除文件夹
  3. 在以后的日子放模块回来(不是同一版本)
  4. 卸载。

原因是hook_install()和hook_uninstall()应该是彼此的镜像。更新挂钩用于保持模块架构和设置与hook_install()中提供的最新内容一致,如果您要使用更新的模块进行卸载(不更新),它将试图卸载不同的设置预期。风险很小,有些事情会发生严重错误,但值得注意。

3

我一直通过从文件系统中删除文件夹(禁用它们之后)来卸载我的模块。我想知道这是否是删除它们的错误方法。

从模块中使用的文件不是模块在Drupal站点上留下的唯一东西;在卸载模块时,还有数据库表,Drupal变量,仍然需要删除的缓存值。模块还可以将行添加到从不同模块创建的数据库表中。
删除模块文件时,不会删除对表系统中包含的模块的任何引用。这意味着,如果在删除它之后复制同一模块,并且删除了它的表,则该模块不会重新创建所需的数据库表。

我会明确地说这是卸载模块的错误方法。

1

Drush使得模块卸载过程更愉快,喜欢的东西:

drush pm-disable [module] // or its shorthand drush dis [module] 
drush pm-uninstall [module] 

事实上,Drush使刚才的一切更愉快(下载/安装模块,处理安装配置文件,创建数据库备份,和我个人最喜欢的,更新你的整个代码库)。如果你还没有使用它,我强烈建议尝试一下。