2011-04-16 88 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