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

And*_*oev 6 php development-environment drupal conventions drupal-7

我正在尝试根据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;
}
Run Code Online (Sandbox Code Playgroud)

Drupal7中是否有类似的东西(我不想使用不同的站点,只有同一站点的不同设置),并且是否存在某种需要发生这种切换的约定(我正在考虑settings.php) ).

Cod*_*er1 6

就我个人而言,我不会将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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

正如其他人在这里建议的那样,为您需要开发和部署的每个环境使用 Drupal 的多站点功能,管理起来会很疯狂。