2010-04-16 60 views
13

是否安全將我模塊Drupal的 - 移動模塊文件夾

  • 網站/所有/模塊/
  • 網站/所有/模塊/的contrib網站/所有/模塊/定製

在生產現場?

也就是說,Drupal會自動檢測模塊是否仍然存在,但在新路徑中?

回答

3

如果您移動了一個模塊,Drupal將會看到舊模塊已損壞,並且存在一個新模塊。它不會認爲兩者是相同的東西 - 只是移動。

+0

謝謝,如果有一個人可以確認這一點,將關閉 – davidosomething 2010-04-16 16:59:54

+2

如果您禁用該模塊,將其移動,然後重新啓用它在新的位置,你應該罰款。它可能會保持其設置。如果你簡單地將它從Drupal下拉出來,它不會那樣。 – McAden 2010-04-16 17:04:19

+2

步驟1:移動模塊。第2步:清除緩存。如果一個模塊在這一點上保持中斷,那麼就有一個錯誤。 – Grayside 2010-04-17 07:08:01

2

Drupal將文件位置存儲在系統表中,當您清除模塊緩存時,信息將被重建,因此如果您移動了內容並在事後清除緩存,則應該沒問題。

+0

好的電話,謝謝! – davidosomething 2010-04-16 21:00:18

1

模塊的/ contrib和/ custom子文件夾很好。對於D7,特別是如果您使用實體,您應該禁用模塊,移動它們然後重新啓用。有用。

替代方案,將模塊移到子文件夾並清除緩存,有時不起作用並可能生成WSOD。

20

最多D6的Drupal版本在系統表中保留了模塊位置,但從D7開始,有多處記錄路徑的地方(例如註冊表和registry_file表),所以只需移動文件夾並清除緩存就不會這樣做,很可能會導致重大問題。

的一系列步驟,你可以嘗試:

  1. 備份數據庫
  2. 入住你的代碼版本控制
  3. 運行以下查詢:

    更新系統 SET文件名= REPLACE(文件名,'sites/all/modules','sites/all/modules/contrib'); SET文件名= REPLACE(文件名,'sites/all/modules','sites/all/modules/contrib');

    UPDATE registry_file SET文件名= REPLACE(文件名, '位點/所有/模塊', '位點/所有/模塊/的contrib')

  4. 移動文件夾

  5. 執行命令drush cc all
+0

當(5)給出錯誤(上下文給出錯誤)時,嘗試截斷所有緩存%表 – filsterjisah 2012-05-03 12:44:04

0

如果您事後清除緩存(drush cc all),則可以安全地移動大部分模塊。

但是,一些模塊,特別是ctools,在系統表或緩存以外的地方存儲文件路徑信息。您可能不得不將這些模塊留在原來的位置,但仍然可以移動其他所有模塊。

3

irakli的答案對我來說效果不錯,但我想爲查詢添加一些額外的複雜性,以防其他人發現它們有用。

第1步 - 更新所有 '自定義' 模塊,如果你足夠幸運,有他們共享命名空間:

UPDATE system SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/custom') WHERE name LIKE 'custom_namespace_%'; 
UPDATE registry SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/custom') WHERE name LIKE 'custom_namespace_%'; 
UPDATE registry_file SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/custom') WHERE filename LIKE '%custom_namespace_%'; 

第2步 - 更新所有的 '開發' 模塊:

UPDATE system SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/dev') WHERE name LIKE 'devel%'; 
UPDATE registry SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/dev') WHERE name LIKE 'devel%'; 
UPDATE registry_file SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/dev') WHERE filename LIKE '%devel%'; 

第3步 - 更新所有'contrib'模塊:

UPDATE system SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/contrib'); 
UPDATE registry SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/contrib'); 
UPDATE registry_file SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/contrib') 

然後將所有模塊放入適當的sites/all/modules/contrib|custom|dev文件夾,清除你的緩存,你很好走。

1

使用http://drupal.org/project/registry_rebuild 「註冊表重建也將重建的系統表,以獲得在該模塊正確的地方,所以你可以引導。「

  • 備份數據庫
  • 上傳的 '模塊'
  • 感動了所有模塊
  • 運行腳本的網站/所有/模塊/ registry_rebuild/registry_rebuild.php
  • 重新加載該網站
  • 如果你得到一個錯誤清除瀏覽器緩存,並且所有的都重新工作
1

其實你只需要做系統表的更新,然後執行以下操作:

drush RR

,也許..

drush cc的所有

drush RR

+0

是 - 這是對此問題的2015答案 – ErichBSchulz 2015-01-01 02:20:15