Предложения по настройкам.php - локальный разработчик, сервер разработки, живой сервер
-
16-10-2019 - |
Вопрос
По сути, один из самых больших вопросов всех времен: каковы способы вы используете Sutess.php в своем рабочем процессе разработки/постановки?
Прямо сейчас у меня есть мой файл settings.php, как и следующее, и я основываю свою разработку в директиве сервера $ host - я могу работать на Dev.example.com для сервера разработки (общего), local.example. com для моего локального компьютера (и других зачетов по кодам Dev) и www.example.com (или просто example.com) для сайта в прямом эфире.
(Этот код находится в разделе «Настройки базы данных» от настройки.php):
$host = $_SERVER['HTTP_HOST'];
$base_url = 'http://'.$host;
$cookie_domain = $host;
switch($host) {
case 'example.com': # Production server
$db_url = 'mysqli://prod_sql_user:password@127.0.0.1/prod_db';
$update_free_access = FALSE;
$conf = array (
// Set production config options here...
'example_setting' => 0,
);
break;
case 'dev.example.com': # Development server
$db_url = 'mysqli://dev_sql_user:password@127.0.0.1/dev_db';
$update_free_access = FALSE;
$conf = array (
// Set production config options here...
'example_setting' => 0,
);
break;
case 'local.example.com': # Local server
$db_url = 'mysqli://local_sql_user:password@127.0.0.1/local_db';
$update_free_access = FALSE;
$conf = array (
// Set production config options here...
'example_setting' => 0,
// Turn off most core caching.
'cache_inc' => 'includes/cache.inc',
'cache' => CACHE_DISABLED,
);
break;
}
?>
Это работает довольно хорошо для большинства целей, но это означает, что у нас есть много посторонних кодов, сидящих в нашем общем файле settings.php ... Есть ли лучший способ?
Решение
То, что я делаю, это разделение этого файла на настройки.
В конце настроек.php - следующий код:
if (file_exists(dirname(__FILE__) . '/local.settings.php')) {
include dirname(__FILE__) . '/local.settings.php';
}
Затем локальный файл исключается из любых венчурных капиталистов, которые вы используете. Преимущество заключается в том, что вы можете установить настройки, которые распространены во всех случаях в настройках.
Другие советы
Похоже, что вы заново изобретаете встроенную многосайтную функциональность Drupal.
Лично я держу все стандартные темы и модули для сайта в sites/all
, а затем sites/dev.example.com
а также sites/example.com
.
В качестве дополнительного бонуса вы можете иметь разные files
папки для каждого сайта, и вы можете добавить любые модули разработки в sites/dev.example.com/modules
также.
Я предпочитаю игнорировать файл локально (используя .gitignore
Файл в GIT), а затем сохраните отдельные версии, если файл на каждом хосте.
Я всегда настраиваю записи DNS или файла хоста и использую
dev.example.com
staging.example.com
а также
example.com
Затем у меня есть полностью отдельные настройки файловых каталогов с различными каталогами файлов. Например ./sites/dev.example.com/files
Почему бы не иметь несколько папок на основе имени хоста разработки?
Пример
- сайты/dev1.domain.com
- сайты/dev2.domain.com
- сайты/dev3.domain.com
- сайты/www.domain.com
Каждый со своим собственным файлом настроек и DB_URL.
Если единственное изменение вещей - это учетные данные базы данных, то вы можете установить переменные среды в вашей локальной (и постановке/производственной) конфигурации виртуального хоста или в папке .htaccess над вашим веб -корнем. Вот простой пример:
/var/www/example.com/drupal-resides-here
Затем я могу создать файл .htaccess здесь:
/var/www/example.com/.htaccess
который имеет следующий код:
SetEnv DB1_USER my_local_user
SetEnv DB1_PASS my_local_pass
SetEnv DB1_HOST my_local_host
SetEnv DB1_NAME my_local_dbname
Затем в /var/www/example.com/drupal-resides-here/sites/default/settings.php
(или что -то еще) Вы можете взять учетные данные DB, такие как:
$db_url = "mysql://{$_SERVER['DB1_USER']}:{$_SERVER['DB1_PASS']}@{$_SERVER['DB1_HOST']}:{$_SERVER['DB1_PORT']}/{$_SERVER['DB1_NAME']}";
Это позволяет нескольким разработчикам запускать вещи локально, и вы можете подтолкнуть к постановке / производству, но все еще отслеживает настройки. Php (там есть больше вещей, чем просто учетные данные базы данных ...). Вам также не нужно было бы отслеживать несколько файлов sutre.php.
Самое простое и наиболее эффективное решение, которое представляет собой только одну линию, является следующим. Просто включите его в последнюю строку вашего файла настройки.php:
@include('settings.local.php');
Символ @ спереди просто означает, что не отображайте никакой ошибки, даже если он не найдет этот файл. Типичные настройки, подобные этой, включают в себя условную, чтобы проверить, есть ли файл. Это достигает его в одной строке без него.
http://php.net/manual/en/language.operators.errorcontrol.php
Также известен как STFU PHP оператор.