Предложения для settings.php - Локальный dev, Сервер разработки, Live-сервер

В принципе, один из самых больших вопросов всех времен: какими способами вы используете settings.php в своем рабочем процессе разработки /промежуточного процесса?

Прямо сейчас у меня есть файл settings.php, как и следующий, и я основываю свою разработку на директиве $ HOST сервера, то есть я могу работать на dev.example.com для сервера разработки (общего) local.example.com для моего локального компьютера (и локальные проверки кода другого разработчика) и www.example.com (или просто example.com) для сайта в реальном времени.

(Этот код находится в разделе «Настройки базы данных» settings.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:[email protected]/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:[email protected]/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:[email protected]/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 ... есть ли лучший способ?

82 голоса | спросил geerlingguy 2 MarpmWed, 02 Mar 2011 23:53:33 +03002011-03-02T23:53:33+03:0011 2011, 23:53:33

7 ответов


68

Что я делаю, это разделение этого файла на settings.php и local.settings.php.

В конце settings.php указан следующий код:

if (file_exists(dirname(__FILE__) . '/local.settings.php')) {
  include dirname(__FILE__) . '/local.settings.php';
}

Локальный файл затем исключается из любого используемого VCS. Преимущество состоит в том, что вы можете устанавливать параметры, которые являются общими для всех экземпляров в settings.php, и иметь этот вариант с версией /распределенным автоматически и сохранять локальные файлы в файле local.settings.php.

ответил Berdir 3 MaramThu, 03 Mar 2011 00:06:46 +03002011-03-03T00:06:46+03:0012 2011, 00:06:46
26

Кажется, что вы изобретаете многофункциональные функции Drupal.

Лично я сохраняю все стандартные темы и модули для сайта в sites/all, а затем sites/dev.example.com и sites/example.com.

В качестве дополнительного бонуса вы можете иметь разные папки files для каждого сайта, и вы можете добавить любые модули разработки на sites/dev.example.com/modules как хорошо.

ответил Paul Jones 2 MarpmWed, 02 Mar 2011 23:59:33 +03002011-03-02T23:59:33+03:0011 2011, 23:59:33
10

Я предпочитаю игнорировать файл локально (используя файл .gitignore в git), а затем сохраняйте отдельные версии, если файл на каждом хосте.

ответил ack 2 MarpmWed, 02 Mar 2011 23:57:29 +03002011-03-02T23:57:29+03:0011 2011, 23:57:29
7

Я стараюсь всегда настраивать записи DNS или хостов и использовать

dev.example.com
staging.example.com

и

example.com

Затем у меня есть полностью отдельные файлы настроек файлов с разными файловыми каталогами. Например ./sites/dev.example.com/files

ответил Stewart Robinson 2 MarpmWed, 02 Mar 2011 23:56:30 +03002011-03-02T23:56:30+03:0011 2011, 23:56:30
5

Почему бы не создать несколько папок на основе имени хоста разработки?

Пример

  • Сайты /dev1.domain.com
  • Сайты /dev2.domain.com
  • Сайты /dev3.domain.com
  • Сайты /www.domain.com

Каждый со своим собственным файлом настроек и db_url.

ответил Kevin 2 MarpmWed, 02 Mar 2011 23:57:09 +03002011-03-02T23:57:09+03:0011 2011, 23:57:09
2

Если изменения только для данных являются учетными данными базы данных, тогда вы можете установить переменные среды в своей локальной (и промежуточной /производственной) конфигурации виртуального хоста или в .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']}";

Это позволяет нескольким разработчикам выполнять задачи локально, и вы можете нажать на этап /производство, сохраняя при этом отслеживание параметров settings.php (там больше вещей, чем только учетные данные базы данных ...). Вам также не нужно будет отслеживать несколько файлов settings.php.

ответил Charlie Schliesser 1 J0000006Europe/Moscow 2012, 18:54:07
0

Самое простое и эффективное решение, которое представляет собой только одну строку, следующее. Просто включите его в последнюю строку файла settings.php:

@include('settings.local.php');

Символ @ спереди просто означает, что не отображается какая-либо ошибка, даже если она не находит этот файл. Типичная настройка, подобная этой, связана с условием проверки наличия файла. Это делает его в одной строке без него.

http://php.net/manual/en/language.operators. errorcontrol.php

Также известен как оператор STFU PHP .

ответил Patoshi パトシ 9 AM000000120000005931 2015, 00:59:59

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132