Настройки проекта - файлы, опции модулей, окружения
Настройки решают, куда сайт ходит за данными и какими ключами подписывает запросы. Здесь о том, где их держать и как разделять по стендам.
Что общего у этих задач
Настройка не место в коде. Значение, вписанное в файл решения, одинаково на всех стендах и уезжает в репозиторий вместе с ключом от чужого сервиса.
Файл читается до базы, опция модуля - из базы. Есть и третье место: хранилище краткоживущего состояния. Его записи живут ограниченный срок и сами исчезают. Отсюда и разделение: подключение к базе живёт в файле, а всё настраиваемое сотрудником - в опциях.
Стенд и боевой сайт отличаются настройками, а не кодом. Как только это перестаёт быть так, выкладка начинает ронять то один сайт, то другой.
Решения подтемы
- Настройки проекта: файл ядра, опции модуля, разные стенды - где хранить значения, как читать их из кода и что не выкладывать.
- Код для двух сайтов: текущий сайт, настройки, общие данные - текущий сайт, кэш и фоновые задания.
- Кэш и сессии в памяти: memcached, Redis, проверка и отказ - секции настроек, подключение, проверка, поведение при отказе.
- Состояние посетителя в куках: запись, чтение, защищённая кука - запись через ответ, чтение через запрос, шифрование, кэш.
- Временное состояние на сервере - срок жизни записи, ключи, пакетная запись, отличие от кэша.
- Второй сайт на одном ядре - запись сайта, домен и папка, шаблон, привязка данных.
- Настройка не применяется: разбор причин - перекрытый файл, опция против файла, сайт, кэш.
- Данные на двух сайтах: каталог, цены, заказы, письма - что общее, что своё, фильтры по сайту и письма.
- Файл инициализации: порядок подключения, что доступно, ошибки - момент подключения, ограничения, состав файла, безопасные правки.
- Второй язык сайта: языки и сайты, тексты шаблона, переключатель - отдельная витрина, языковые файлы, переключатель, письма.
- Сайт на технических работах: заглушка и доступ для своих - штатное закрытие, своя заглушка, доступ для своих, код ответа.
Частые вопросы
Где хранить ключ внешнего сервиса?
В опциях своего модуля или в файле вне репозитория. В коде решения ключу не место.
Чем опции модуля отличаются от файла настроек?
Опции лежат в базе и правятся из интерфейса. Файл читается раньше базы и переживает её недоступность.
Как задать разные значения на стенде и боевом?
Дополняющим файлом настроек, который не выкладывается. Основной файл при этом остаётся общим.
Класть ли файл настроек в репозиторий?
Сам файл да, пароли и ключи - нет. Их выносят в дополняющий файл каждого стенда.
Связанные темы
- Ядро D7 - устройство ядра целиком
- Сервисы и конфигурация D7 - как ядро читает настройки
- Git в проекте: что версионировать, что игнорировать - что не должно попасть в репозиторий
- Свой модуль: структура, установка, автозагрузка - где заводят свои опции
- Раздел Ядро и D7