撰文於銘 飄散隨風 心行無語 仰首蒼穹

使用 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-up
Multi-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_"。

總之,只要資料表的名稱,和各站使用的前置詞能配合,不管怎麼改,雙方能同步應該就沒問題了。

以上若有說的不明白或錯誤的地方,還請大家多多指教。

本文的引用網址

http://heavenchou.buddhason.org/trackback/149

回應

感謝 JOE 的指導

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

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

有關 'users' =>

有關 '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 的話, 他的方法不一定行得通
你介紹的這個方法應該才是最正宗

發表新回應

這個欄位的內容會保密,不會公開顯示。
  • 自動將網址與電子郵件位址轉變為連結。
  • 可使用的 HTML 標籤:<a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <font> <b> <i> <u> <table> <tr> <td> <th> <hr> <br> <p> <span> <div>
  • 自動斷行和分段。

更多關於格式選項的資訊

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image.