Как мне настроить 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?
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 удалить ключи, которые пришли с импортированной базой данных, и забрать те, которые указаны в файле настроек.
Вы также можете использовать Модули среды , что позволяет использовать разные модули для каждой среды.
Инструкции
Во-первых, вам необходимо настроить свои сайты разработки/постановки/производства с их собственными уникальными 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'];