如何设置default.settings.php以将其用于开发,测试和生产站点?


8

我在Drupal 7网站设置中使用devtstprd环境。我使用git进行版本控制。

我想消除将站点从dev移到tst以及从tst移到prd时需要做的一个手动步骤。

现在,我必须分别为dev,tst和prd网站更新settings.php。

我想设置default.settings.php文件,以便将dev,tst和prd的所有设置都存储在一个default.settings.php和中。复制到settings.php后,Drupal将根据环境选择正确的设置。

我正在寻找类似下面的伪代码的东西:

common.settings 

if environment = dev then
   ...
   dev.settings
   ...
else if environment = tst then
   ...
   tst.settings
   ...
else if environment = prd then
   ...
   prd.settings
   ...
end if

您知道如何为Drupal 7做到这一点吗?

Answers:


11

不要使用与伪代码建议相同的设置文件。而是在三个不同的文件夹中使用三个不同的设置文件,每个文件夹对应于每个实例的域名。

至少,通常每个环境都将使用单独的数据库主机。随环境而异的其他设置可能包括Apache Solr主机,memcached设置,临时文件夹和文件文件夹,仅举几例。您可以将所有这些放置在那里。当您将数据库从PROD迁移到TEST到DEV时,它将自动获取您指定的设置。

想象一下,我的网站名为myfoobarsite.com。这是我的设置结构的样子:

/htdocs
../sites
..../default
....../default.settings.php
..../dev.myfoobarsite.com (DEV)
....../settings.php
..../qa.myfoobarsite.com (TEST)
....../settings.php
..../myfoobarsite.com (PROD)
....../settings.php

我通常也有该站点的两个本地实例,一个实例具有PROD的最新数据库快照,另一个实例则保留了所有更改。这在使用功能时非常有用,它允许您在提交之前针对生产数据库(本地)测试功能。这是修改后的结构:

/htdocs
../sites
..../default
..../dev.myfoobarsite.com (DEV)
..../qa.myfoobarsite.com (TEST)
..../myfoobarsite.com (PROD)
..../mfbs.local (LOCAL ONE)
....../settings.php
..../mfbs2.local (LOCAL TWO)
....../settings.php

至于本地实例,请记住在/etc/hosts文件中进行适当的输入并修改Apache主机设置。

为了以防万一,我还从settings.php中放了一段代码作为指导:

<?php
$databases['default']['default'] = array(
    'database' => 'myfoobarsite',
    'username' => 'foo',
    'password' => 'bar',
    'host' => '127.0.0.1',
    'port' => '3306',
    'driver' => 'mysql',
    'prefix' => '',
);

/**
 * Apache Solr settings.
 * Use the acquia_identifier/acquia_key when hosting w/ Acquia.
 * Specify only the apachesolr_path key for your local instance
 * or instances that do not use Acquia.
 */
//$conf["acquia_identifier"] = "ABCD-12345";
//$conf["acquia_key"] = "1234f05ab12345dc1234a1234bbc1c12";
$conf["apachesolr_path"] = "http://localhost:8983/solr";

/**
 * Filesystem settings (MAC OS X, LOCAL)
 */
$conf["file_public_path"] = "sites/default/files";
$conf["file_temporary_path"] = "/Users/amateurbarista/tmp";
$conf["file_private_path"] = "/Users/amateurbarista/Sites/tfk/private";

最后,如果您使用Acquia进行托管,则http://myfoobarsite.com/admin/config/system/acquia-agent每次迁移数据库时都需要转到并单击“清除键”。这将导致Drupal删除导入的数据库附带的密钥,并选择设置文件中指定的密钥。


我可能错过了要点,但这比问题中的伪代码更好吗?
兰德尔2014年

1
隐私,安全性,微观管理。将设置放在不同的文件中将允许不同的角色(本地开发人员,sysadmin)对不同的文件具有不同的权限。系统管理员还可以使用我的建议拒绝对prod / qa / dev设置的可见性,而本地开发人员将始终保留其本地设置。使用“所有文件在一个文件中”的方法也很难弄乱事情,一次弄乱所有环境会更容易。根据我的建议,您甚至可以设置为每个站点都存在并启用不同的模块。
业余咖啡师

0

您还可以使用环境模块,该模块允许您在每个环境中使用不同的模块。

使用说明

首先,您需要使用自己独特的settings.php来设置开发/登台/生产站点(通常的模式是需要settings.php中的settings.local.php)。如果您没有这种设置,则不需要此模块。

对于暂存/开发,请在settings.php中添加类似的内容,一旦启用environment_modules,这些模块也将被启用。

例如

$conf['environment_modules'] = array(
  'devel' => 'sites/all/modules/devel/devel.module',
);

您还可以通过以下示例使用一个settings.php:

$env = $_ENV['AH_SITE_ENVIRONMENT']; // Acquia way: environment name
$env = $_SERVER['SERVER_NAME']; // or your server name, or whatever
$envModules = array(
    'default' => array( // By default it is development environment
      'devel' => 'sites/all/modules/contrib/devel/devel.module',
      'coder_review' => 'sites/all/modules/contrib/coder/coder_review/coder_review.module',
    ),
    'dev' => array(
      'devel' => 'profiles/mp_singapore/modules/devel/devel.module',
      'coder_review' => 'sites/all/modules/contrib/coder/coder_review/coder_review.module',
    ),
    'test' => array(
      'diff' => 'sites/all/modules/contrib/diff/diff.module',
    ),
    'prod' => array(
      'diff' => 'sites/all/modules/contrib/diff/diff.module',
    ),
);
$conf['environment_modules'] = $envModules[$env] ?: $envModules['default'];

到目前为止,此模块没有d8版本。
Vishal Kumar Sahu
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.