Как мне настроить default.settings.php использовать его для разработки, тестирования и производственных площадок?


Я использую dev, настроены среды tst и prd для моего сайта Drupal 7. Я использую git для управления версиями.

Я хотел бы исключить один ручной шаг, который мне нужно сделать при перемещении сайта из dev в tst и из tst в prd.

Теперь мне нужно обновить settings.php отдельно для сайтов dev, tst и prd.

Я хотел бы настроить 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?

Author: kiamlaluno, 2011-12-10

2 answers

Не используйте один и тот же файл настроек, как вы предлагаете, с вашим псевдокодом. Вместо этого используйте три разных файла настроек в трех разных папках, каждая из которых соответствует доменному имени каждого из ваших экземпляров.

Как минимум, как правило, в каждой среде будет использоваться отдельный узел базы данных. Другие настройки, которые могут отличаться в разных средах, могут включать хост Apache Solr, настройки memcached, временную папку и папку файлов, и это лишь некоторые из них. Вы можете разместить все это там. Когда вы переносите свою базу данных из PROD для ТЕСТИРОВАНИЯ в 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 удалить ключи, которые пришли с импортированной базой данных, и забрать те, которые указаны в файле настроек.

 11
Author: amateur barista, 2011-12-12 16:07:57

Вы также можете использовать Модули среды , что позволяет использовать разные модули для каждой среды.

Инструкции

Во-первых, вам необходимо настроить свои сайты разработки/постановки/производства с их собственными уникальными settings.php (общий шаблон для этого состоит в том, чтобы требовать settings.local.php от settings.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'];
 0
Author: kenorb, 2013-01-29 12:16:14