Предложения по настройкам.php - локальный разработчик, сервер разработки, живой сервер

drupal.stackexchange https://drupal.stackexchange.com/questions/9

Вопрос

По сути, один из самых больших вопросов всех времен: каковы способы вы используете 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 оператор.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с drupal.stackexchange
scroll top