六月 15, 2020 | 後端和Drupal

【D8教學】config_split and shield 模組

作為一位網站開發人員,在架設安裝網站初期最常碰到的需求即是要分開展示站(Staging site)與開發站(Dev site)的設定。為什麼我們要做這樣的分別呢?那麼我們要先明白Staging site vs. Dev site本質上的差異。

什麼是 Staging site?Dev site?

展示站 (Staging site),顧名思義是提供給客戶確認、PM測試、存儲公開展示資料的位置作為開發用的中樞環境,其功能設定基本上應與未來要公開上架的運作站 (Production site)雷同。那麼最大的差異在於不讓客戶直接使用存取資料之外,更要確保展示站不被其他匿名者以及搜尋引擎的爬蟲找到。後續介紹的Shield module即可引入此功能,讓展示站僅開放給有帳密者使用。

開發站 (Dev site) 則很簡單明瞭,是能讓你在此處撰寫內碼、系統測試、容許出錯,進行開發的環境。這樣的環境由於是本地封閉式的,只有在確立好開發的功能測試完畢之後,才會將內碼推至展示站 (Staging site) 上。在開發環境上,開發人員亦有個別開發工具的選擇 (如:使用環境架設軟體WAMP、MAMP、Docker、ddev等)及開發相關設定(如:取消CSS、JS壓縮、取消存取快取等)。

如上所述,這樣的設定對團隊開發是有益處的。Drupal社群有提供許多開發專用的模組 (如Devel),而這些模組其實是不需要在展示站上啟用的,因此我們就需要使用config_split模組依照開發環境來進行特定模組的啟用/停止。

使用範例:展示站 (Staging site):

  • Shield (啟用)
  • Devel (停用)
  • Kint (停用)

開發站 (Dev site):

  • Shield (停用)
  • Devel (啟用)
  • Kint (啟用)

使用步驟

  1. 啟用模組

    composer require drupal/config_split drush en config_split

  2. 請於admin/config/development/configuration/config-split 設立兩份不同的設定檔:stage & dev。此設定檔會建立兩個分開的目錄來儲存於系統不同環境時所讀取的個別設定檔案。

dev config image

設置完畢之後,網站目錄的架構應如同下列。
      - config
      -- dev
      -- stage
      - webroot
      composer.json
      composer.lock
  1. 設定好之後,我們先進行開發站 (Dev site) 的設定。請確定此設定檔是啟用的。

separate config

  1. 下載devel模組並啟用devel、kint模組。

    composer require drupal/devel drush en devel kint -y

  2. 回到設定頁面admin/config/development/configuration/config-split,在dev設定檔內選取devel、kint模組。*多選請按住Ctrl鍵

select module image

  1. 匯出dev所選取的相關模組設定檔。檔案會自動產生於相應的資料夾內。

    drush cex -yfolder structure

  2. 輪到staging site的設定,請先下載shield模組。

    composer require drupal/shield drush en shield

  3. 將dev設定檔於頁面admin/config/development/configuration/config-split停用。啟用stage設定檔。

active stage settings

  1. 同步驟五一般,但請於stage設定檔內選取shield模組,並匯出設定檔。

    drush cex -yfolder structure

  2. 接下來就是要分別修改settings.php / settings.local.php,讓config_split知道應當運行那個設定檔。settings.php會設定stage site要使用的,而settings.local.php則是dev site使用。

    --sites/default/settings.local.php $config['config_split.config_split.stage_site']['status'] = FALSE; $config['config_split.config_split.dev_site']['status'] = TRUE;

    --sites/default/settings.php $config['config_split.config_split.stage_site']['status'] = TRUE; $config['config_split.config_split.dev_site']['status'] = FALSE;

最後請記得清除快取,網站系統才會讀取新加入的設定值。

//clear cache
  drush cr
  1. 接下來每次匯入設定時,就會看到啟用/停用的分別效果。

    drush cim -y

**注意:**第一次推上展示站時,需要進行兩次匯入的動作。第一次是進行config_split模組安裝、第二次才會在config_split模組正常運行的情形下抓取個別的環境設定檔。記得匯入之後要清除快取喔!