使用 Drupal 6.11 安裝「共享使用者資料庫」的多網站(下)

續前... 使用 Drupal 6.11 安裝「共享使用者資料庫」的多網站(上) ■ 8. 多網站安裝 Drupal 可以同時架設多站,也就是同一套程式可以供給數個站使用,日後網站或模組更新,更新一次就可以全部數站都更新,非常方便。資料庫則可以獨立使用,也可以多站共享,這都是非常具有彈性的設計。 INSTALL.txt 檔案中有提到多站的架設方式 (MULTISITE CONFIGURATION)。 我也找了一些參考資料: ● Drupal localhost 多站開發設定, Drupal localhost multi-site config by joe ● Run multiple sites from the same code base (multi-site) 如果要共用使用者資料表格,或者要調整各站資料表格的獨立或分享,則可以參考底下這些及這些的連結。(@_@ 暈~~) ● Multi-site installation and set-upMulti-site with single codebase, different content databases, shared user database, shared sign-on 不過我看了半天,還是有些細節地方不太明白,但是大概也有些概念,所以自己也實作出來了,我把我的設定方式寫出來,供有需要的人參考看看。   *** *** *** 假設我要做的三個站是 my_web.org , site1.my_web.org , site2.my_web.org a. my_web.org 的安裝法 原本 sites/default/settings.php 裡面有這一行 $db_prefix = ''; 在安裝的第三步驟產生時,改成 $db_prefix = 'main_'; 在安裝時,設定資料庫的部份,也會詢問 db_prefix,也是輸入 "main_"。如此在安裝後,就會看到 mydb 資料庫產生很多 main_ 開頭的資料表。 b. site1.my_web.org 的安裝法 建立 sites/site1.my_web.org 目錄 把原來的 sites/default/default.settings.php 複製成 sites/site1.my_web.org/settings.php 把 settings.php 裡面的這一行 $db_prefix = ''; 改成 $db_prefix = 'site1_'; 在安裝時,設定資料庫的 db_prefix,也是輸入 "site1_"。如此在安裝後,就會看到 mydb 資料庫產生很多 site1_ 開頭的資料表。 重點來了,在安裝完之後,把 sites/site1.my_web.org/settings.php 的唯讀屬性移除,把裡面的這一行 $db_prefix = 'site1_'; 改成
$db_prefix = array(
      'default'   => 'site1_',
      'users'     => 'main_',
      'sessions'  => 'main_',
      'role'      => 'main_',
      'authmap'   => 'main_',
    );
儲存後,再把 sites/site1.my_web.org/settings.php 設成唯讀,以保障安全。 這裡的意思就是,site1 的使用者原本是讀取 site1_users 這個資料表,因為我們修改之後,就變成讀取 main_users 資料表,也就是和第一個站共用使用者資料。 上面共用的資料表有 users, sessions, role, authmap,這是參考 settings.php 文件裡面的說明,不過 authmap 是做什麼用的我還不清楚,而是不是還有哪些資料表可共享我也還沒深入了解。 c. site2.my_web.org 的安裝法 其實和 site1.my_web.org 的安裝相同。 建立 sites/site2.my_web.org 目錄 建立 sites/site2.my_web.org/settings.php settings.php 裡面修改成 $db_prefix = 'site2_'; 進行安裝。 安裝後 settings.php 再修改成
$db_prefix = array(
      'default'   => 'site2_',
      'users'     => 'main_',
      'sessions'  => 'main_',
      'role'      => 'main_',
      'authmap'   => 'main_',
    );
如此即可。 如果不想共用使用者資料,就保持 $db_prefix = 'site2_'; 即可。 如果各站有不同的版型與模組要安裝,例如 site1 有自己的模組,就放在 sites/site1.my_web.org/modules 目錄中,若 site2 有自己要用的版型,就放在 sites/site2.my_web.org/themes。 以上就是安裝多站與共用資料表的程序與心得。   *** *** *** 至於我比較不明白的地方,是那些介紹的文件中,都是用 'users' => 'shared_', 這個前置詞,我在想,這是固定的特殊名詞?或是我們要自己把資料表加上 "shared_" 這個前置詞?因為我好像沒看到第一個主站是如何安裝的,只看到第二個及之後的站用 "shared_"。 總之,只要資料表的名稱,和各站使用的前置詞能配合,不管怎麼改,雙方能同步應該就沒問題了。 以上若有說的不明白或錯誤的地方,還請大家多多指教。 ■ 2011/09/23 補充: 昨天在多站運作時,發現一個問題,那就是站友的頭像無法共用。 網站我是設定成多站且共用使用者資料,如此一來,使用者才能在註冊或登錄某一站時,就等於同時在各站註冊及登錄了。 但是問題來了,我發現使用者在A站註冊並上傳個人的相片成為頭像之後,在A站可以正常顯示,但在B站在呈現時就有問題了。 網路上搜尋相關的資料,果然別人也遇到同樣的問題,所幸運氣好,找到一篇討論的資料 "Multisite with shared user table, but how to share user pictures?",並看到有人寫出底下這支模組供大家使用,我自己測試之後,問題就順利解決了。 Global Avatar 模組:http://drupal.org/project/global_avatar 使用方法很簡單,每一個站都要安裝此模組,然後只要指定某一站設定成主要的站台,日後註冊時上傳的頭像圖檔都會放在該站,各站在呈現時也會使用該站的頭像。 該程式也有一個功能會幫忙把已經分散在各站的頭像集中到指定的站台,算是很貼心的功能。
重要度:
文章分類:
電腦標籤:

回應

有關 'users' => 'shared_',:

原本中:
Note the all important trailing dot on the end of drupal_shared_tables - this is vital! You're pre-pending table name info to Drupal's default table name, so you need the dot or Drupal will try to select:

算是一個dirty hack
如果本身有prefix 的話, 他的方法不一定行得通
你介紹的這個方法應該才是最正宗

感謝 JOE 的指導!那些英文真的讓我很頭痛呢。

JOE 前輩的網站:JOE Tsui's Drupal site 是學習 Drupal 很好的參考網站,可以學到很多東西喔。

如您所提內容
把settings.php複製過去再修改$db_prefix的內容
然後怎麼安裝?
第一次安裝(main)的時候,打網址/install.php就會進入安裝程序
可是第二次應該只有增加sites中一個目錄跟settings.php這個檔而已,我要到哪裡去呼叫安裝程序?
是不是我會錯意了!煩請指正...

抱歉, 今天才看到您的問題.

若是以文章內的例子來說, 只要用瀏覽器進入

http://my_web.org/

就會進入主站的安裝程序.

同樣的, 只要用瀏覽器進入

http://site1.my_web.org

就會進入 site1 該站的安裝程序了.

感謝您的說明!我試試....(原本試的進入第二個網站的網址,沒出現安裝設定畫面= =!我用MS Matrix試的)

另想請教,若第一個網站當時$db_prefix 沒掛main_ ,目前想增加第二個網站,可行?

是否將元資料庫中所有TABLE更名為main_XXXXX,再修原網站settings.php中的內容即可?

再次抱歉了. 您的留言我沒有收到 email 通知, 直到剛剛有另一個留言, 我才看到這篇. 看來, 我還是取消審核好了...除非廣告再次變多.

您的問題其實我也不確定, 不過我會這樣想, 第一個站若沒設定, 第二個站我會設定如下:

$db_prefix = array(
      'default'   => 'site2_',
      'users'     => '',
      'sessions'  => '',
      'role'      => '',
      'authmap'   => '',
    );

我想這樣應該也是同樣的原理了. 不過我不確定這樣是不是可行.

至於你說用改的, 應該也可以, 我有試過改資料庫名字, 結果依然可以順利執行.

2011/09/23 補充:

昨天在多站運作時,發現一個問題,那就是站友的頭像無法共用。

網站我是設定成多站且共用使用者資料,如此一來,使用者才能在註冊或登錄某一站時,就等於同時在各站註冊及登錄了。

但是問題來了,我發現使用者在A站註冊並上傳個人的相片成為頭像之後,在A站可以正常顯示,但在B站在呈現時就有問題了。

網路上搜尋相關的資料,果然別人也遇到同樣的問題,所幸運氣好,找到一篇討論的資料 "Multisite with shared user table, but how to share user pictures?",並看到有人寫出底下這支模組供大家使用,我自己測試之後,問題就順利解決了。

Global Avatar 模組:http://drupal.org/project/global_avatar

使用方法很簡單,每一個站都要安裝此模組,然後只要指定某一站設定成主要的站台,日後註冊時上傳的頭像圖檔都會放在該站,各站在呈現時也會使用該站的頭像。

該程式也有一個功能會幫忙把已經分散在各站的頭像集中到指定的站台,算是很貼心的功能。

發表新回應