【问题标题】:Setting various environments (development, production) based on the URL根据 URL 设置各种环境(开发、生产)
【发布时间】:2011-08-06 23:04:37
【问题描述】:

我正在尝试根据 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)。

【问题讨论】:

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


【解决方案1】:

我个人不会将 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 的多站点功能,管理起来会很疯狂。

【讨论】:

  • 可能这就是我要走的路。我需要这样,所以我可以直接从我的 SVN 部署,而不是更改文件并确保每次都能正常工作。当我将登台服务器添加到环境中时,事情变得更加复杂。
  • 这似乎比它需要的更复杂,但我知道每种情况都不同。如果您在每个环境中使用仅将 settings.default.php 复制到 settings.php 的方法(即 settings.php 不在版本控制中),那么您应该可以通过 svn 进行部署,因为您的设置文件将永远不会被触动。对我来说,配置每个 settings.php 文件比在单个 settings.php 文件中管理所有数据更容易且更便携。
  • 请注意,Drush 似乎使用的是 $_SERVER['HTTP_HOST'] 而不是 $_SERVER['SERVER_NAME']。
【解决方案2】:

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

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

【讨论】:

  • 谢谢。我知道 Drupal 的“多站点”功能,但这意味着每个环境都有不同的文件夹、模块、上传等。我以前用过这个,但我想要一些不同的东西。我希望能够为同一个站点设置不同的环境(站点的文件夹始终为“默认”,但名称、数据库和其他一些设置将基于 URL 进行设置)。也就是说,我将它部署在我的本地盒子上,数据库会自动切换到我的本地数据库等
【解决方案3】:

我认为使用单独的站点是您想要的。我有类似的设置,不同的站点都有自己的 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 使用正确的站点配置。

【讨论】:

  • 这与我想要的类似,但我认为在 Drupal 中应该有更好的方法来设置它们,因为我不能使用符号链接(Windows 开发机器)和那些链接移动到另一台机器时会搞砸。我想简短的回答是没有这样的地方,要么我必须使用“多站点”并且重复文件、模块等会导致碎片,要么编辑设置。 php 并像我上面那样设置它...
猜你喜欢
  • 1970-01-01
  • 2015-04-04
  • 2021-09-10
  • 2019-03-17
  • 2012-04-05
  • 2016-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多