2011-04-16 83 views
6

我想根據URL在Drupal中設置環境。 例如,如果我轉到mysite.local,它將使用localdb,它會將網站的名稱更改爲「Local Mysite」;如果我轉到mysite.com,它會自動切換到使用productiondb並將名稱設置爲「Mysite」。基於URL設置各種環境(開發,生產)

這是一個類似的設置我使用的大多數基於MVC框架:

define('DEVELOPMENT', 'mysite.local'); 
define('PRODUCTION', 'mysite.com'); 

switch ($_SERVER['SERVER_NAME']) { 
    case DEVELOPMENT: 
    // development server 
    $config['base_url'] = "http://mysite.local"; 
    $config['title'] = "DEVELOPMENT Mysite"; 
    $config['debug'] = 1; 
    break; 

    default: 
    // live server 
    $config['base_url'] = "http://mysite.com/"; 
    $config['title'] = "Mysite"; 
    $config['debug'] = 0; 
    break; 
} 

是否有類似的東西在Drupal7已經(我不希望使用不同的網站,不同的只是設置在同一網站),並且在這種開關需要發生的地方有一些約定(我正在考慮settings.php)。

+0

我建議你看看http://drupal.stackexchange.com/questions/9/suggestions-for-settings-php-local-dev-development-server-live-server/41#41,尤其是我的在那裏回答。 – Berdir 2011-04-17 08:25:50

回答

4

就我個人而言,我不會將settings.php提交到版本控制(settings.default.php是),然後在每個環境中保留一個基於settings.default.php的自定義settings.php文件。

但是,如果你喜歡這樣設置你的環境,那麼類似的東西可以在你的sites/default/settings.php文件中工作。

define('DEVELOPMENT', 'mysite.local'); 
define('PRODUCTION', 'mysite.com'); 

switch ($_SERVER['SERVER_NAME']) { 
    case DEVELOPMENT: 
    // development server 
    $db_url = 'mysql://user:[email protected]/mydb_dev'; 
    $db_prefix = ''; 
    $base_url = 'http://mysite.local'; 
    $conf = array(
    'site_name' => 'Development Environment', 
    ); 
    break; 

    default: 
    // live server 
    $db_url = 'mysql://user:[email protected]/mydb_prod'; 
    $db_prefix = ''; 
    $base_url = 'http://mysite.com'; 
    $conf = array(
    'site_name' => 'My Site', 
    ); 
    break; 
} 

記住,對於這些瓦爾您在此處使用的,您需要註釋掉,如果他們在settings.php配置的其他部分來定義。

我還應該補充一點,我認爲針對開發環境的多站點是一個壞主意,我想出於同樣的原因,我更喜歡每個環境都有自己的自定義settings.php文件。在大多數情況下,我寧願保持代碼的可移植性,因爲除了在運行代碼的環境的設置文件中,我不需要任何代碼或文件系統對任何環境的引用。

使用Drupal的多站點功能,您需要開發和開發的每個環境,正如其他人所暗示的,這將是瘋狂的管理。

+0

也許這是我將要走的路。我需要這種方式,所以我可以直接從我的SVN部署,而不是更改文件並確保每次都能正常工作。當我將臨時服務器添加到環境中時,問題變得更加複雜。 – 2011-04-18 17:12:02

+0

它似乎比它需要更復雜,但我知道每種情況都不同。如果您在每個環境中只使用settings.default.php複製settings.php(即settings.php不在版本控制中)的方法,那麼您應該可以通過svn進行部署,因爲您的設置文件將會永遠不會被觸動。配置每個settings.php文件一次比在單個settings.php文件中管理所有數據更容易,更便於攜帶。 – Coder1 2011-04-18 17:39:28

+0

請注意,Drush似乎使用$ _SERVER ['HTTP_HOST']而不是$ _SERVER ['SERVER_NAME']。 – mperrin 2016-06-20 16:36:33

0

我認爲使用單獨的網站是你想要的。我有一個類似的設置,不同的網站都有自己的settings.php文件。但後來我將模塊和主題目錄進行了符號鏈接,以便我沒有重複的文件。但是如果你正在建立一個開發環境,你會希望將它們分開。

所以我有這樣的事情:

drupal/sites/mysite.com/themes 
drupal/sites/mysite.com/modules 
drupal/sites/mysite.com/settings.php 

drupal/sites/mysite.local/themes => ../../mysite.com/themes 
drupal/sites/mysite.local/modules => ../../mysite.com/modules 
drupal/sites/mysite.local/settings.php 

drupal/sites/default => mysite.com 

Drupal將使用基於URL的正確站點配置。

+0

這與我想要的類似,但我認爲在Drupal中應該有一個更好的方法來設置它們,因爲我不能使用符號鏈接(Windows開發機器),並且這些鏈接在移動到時會變得混亂一臺不同的機器。我想最簡單的答案就是沒有像這樣的地方,或者我必須去與「多地點」,並有重複的文件,模塊等,這將導致碎片,或編輯設置。 PHP和設置它,就像我上面有... – 2011-04-16 22:40:19

1

你所描述的在Drupal中被稱爲multi-site configuration
用很少的話說,在多站點配置中,您將Drupal設置爲使用基於用於訪問站點的域名的不同配置文件。它允許使用相同的代碼來將不同的域名指向同一臺服務器,就像你的情況一樣,你想使用不同的域名訪問同一臺服務器。

您還對Run multiple sites from the same code base (multi-site)中報告的內容感興趣。

+0

謝謝。 我知道Drupal的「多站點」功能,但這意味着每個環境都有不同的文件夾,模塊,上傳等。我之前用過這個,但我想要一些不同的東西。我希望能夠爲同一站點設置不同的環境(站點的文件夾始終爲「默認」,但名稱,數據庫和其他一些設置將根據URL設置)。換句話說,我將它部署在我的本地盒子上,數據庫將自動切換到我的本地數據庫等。 – 2011-04-16 22:33:42