根据URL设置各种环境(开发,生产)

时间:2011-04-16 16:05:58

标签: php drupal development-environment drupal-7 conventions

我正在尝试根据URL在Drupal中设置环境。 例如,如果我转到mysite.local,它将使用localdb,它会将站点名称更改为“Local Mysite”;如果我去mysite.com,它将自动切换到使用productiondb并将名称设置为“Mysite”。

这是我用于大多数基于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)。

3 个答案:

答案 0 :(得分: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:pass@localhost/mydb_dev';
    $db_prefix = '';
    $base_url = 'http://mysite.local';
    $conf = array(
     'site_name' => 'Development Environment',
    );
    break;

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

请记住,对于您在此处使用的每个变量,您需要注释掉它们是否在settings.php的其他部分中定义。

我还应该补充一点,我认为多站点用于开发环境是一个坏主意,我想同样的原因我更喜欢每个环境都有自己的自定义settings.php文件。在大多数情况下,我更喜欢保持代码的可移植性,因为我不需要任何代码或文件系统引用任何环境,除了我运行代码的环境的设置文件。

将Drupal的多站点功能用于您需要开发和启动的每个环境,正如其他人在此建议的那样,管理起来会非常疯狂。

答案 1 :(得分:1)

你所描述的内容在Drupal中被称为multi-site configuration 简单地说,在多站点配置中,您将Drupal设置为使用基于用于访问站点的域名的不同配置文件。它允许对指向同一服务器的不同域名使用相同的代码,就像您要使用不同域名访问同一Web服务器一样。

您也对Run multiple sites from the same code base (multi-site)中报告的内容感兴趣。

答案 2 :(得分: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将根据网址使用正确的网站配置。