Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

Разработчикам на заметку: универсальная конфигурация движка


aVadim
 Поделиться

Рекомендованные сообщения

Если вы серьезно занимаетесь разработкой, а не просто "погулять вышли", то один и тот же проект у вас крутится, как минимум, на двух серверах - на девелопер-сервере (где, собственно, вы и занимаетесь кодингом), и на продакшн-сервере - это уже рабочий сервер у хостера, доступный публике, куда вы заливаете результаты своего труда.

Понятно, что самый простой способ залить изменения - это сделать сравнение папок (локальных и удаленных) и залить измененные файлы. Но тут часто разработчики наступают на одни и те же грабли с завидной регулярностью: файла конфигурации. Ведь они отличаются на локальном и удаленном серверах - везде прописаны свои папки, свои пути, свои базы и т.д., которые не совпадают на сервере локальном и на удаленном. Поэтому надо следить, чтобы при заливке файлов измененных файлов не трогались файлы конфигурации. Проблема мелкая, но я сам раньше постоянно на это натыкался - сначала зальешь, потом спохватишься, что сайт перестал работать, и давай быстро конфиги в порядок приводить. В общем, я как-то для себя нашел решение, которое использую сейчас и в ocStore.

Для начала я создал в корне проекта файл defines.php, где определяю константу LOCALHOST и общие константы, которые используются и в админке, и в клиентской части:

<?php

// Определение локального сервера
if (($_SERVER['SERVER_ADDR'] == '127.0.0.1' AND $_SERVER['REMOTE_ADDR'] == '127.0.0.1')
        OR (strpos($_SERVER['SERVER_NAME'], 'localhost') !== false)
        OR (substr($_SERVER['SERVER_NAME'], -6) == '.local')
        OR (substr($_SERVER['SERVER_NAME'], -4) == '.loc')
) {
    define('LOCALHOST', 1);
} else {
    define('LOCALHOST', 0);
}

define('DOCROOT', dirname(__FILE__));

if (LOCALHOST) {

// DB
    define('DB_DRIVER', 'mysql');
    define('DB_HOSTNAME', 'localhost');
    define('DB_USERNAME', 'user');
    define('DB_PASSWORD', 'psw');
    define('DB_DATABASE', 'db_name_local');
    define('DB_PREFIX', 'oc_');
} else {
    define('DB_DRIVER', 'mysql');
    define('DB_HOSTNAME', 'localhost');
    define('DB_USERNAME', 'user');
    define('DB_PASSWORD', 'psw');
    define('DB_DATABASE', 'db_name_remote');
    define('DB_PREFIX', 'oc_');
}

// DIRs
define('DIR_SYSTEM', DOCROOT . '/system/');
define('DIR_DATABASE', DOCROOT . '/system/database/');

define('DIR_CONFIG', DOCROOT . '/system/config/');
define('DIR_IMAGE', DOCROOT . '/image/');
define('DIR_DOWNLOAD', DOCROOT . '/download/');
define('DIR_CACHE', DOCROOT . '/_cache/_sys/');
define('DIR_TMP', DOCROOT . '/_cache/_tmp/');
define('DIR_DATA', DOCROOT . '/_data/');

// EOF

Затем переписал файлы config.php для клиентской части:

<?php
require_once 'defines.php';

// DIR
define('DIR_APPLICATION', DOCROOT . '/catalog/');
define('DIR_LANGUAGE', DOCROOT . '/catalog/language/');
define('DIR_THEME', DOCROOT . '/catalog/view/theme/');
define('DIR_LOGS', DOCROOT . '/system/logs/');

// EOF

и то же самое для админки:

<?php

require_once '../defines.php';

if (LOCALHOST) {
    define('SITE_NAME', 'my-site.local');
} else {
    define('SITE_NAME', 'my-site.ru');
}

// HTTP
define('HTTP_SERVER', 'http://' . SITE_NAME . '/admin/');
define('HTTP_CATALOG', 'http://' . SITE_NAME . '/');
define('HTTP_IMAGE', 'http://' . SITE_NAME . '/image/');

// HTTPS
define('HTTPS_SERVER', 'http://' . SITE_NAME . '/admin/');
define('HTTPS_IMAGE', 'http://' . SITE_NAME . '/image/');

// DIR
define('DIR_APPLICATION', DOCROOT . '/admin/');
define('DIR_LANGUAGE', DOCROOT . '/admin/language/');
define('DIR_THEME', DOCROOT . '/admin/view/');
define('DIR_TEMPLATE', DOCROOT . '/admin/view/template/');
define('DIR_LOGS', DOCROOT . '/system/logs/');
define('DIR_CATALOG', DOCROOT . '/catalog/');

// EOF

И теперь я смело могу лить любые изменения с локального (девелоперского) сервера на удаленный (продакшн), совершенно не задумываясь относительно файлов конфигураций, чем сохраняю себе при обновлениях энное количество нервных клеток, чего и вам желаю.

  • +1 2
Ссылка на комментарий
Поделиться на других сайтах


Пользуюсь diff вместе с patch - никогда такой проблемы небыло. Перед применением изменений всегда просматриваю файл патча и если что-то не так, я это сразу же вижу.

Ссылка на комментарий
Поделиться на других сайтах


Пользуюсь diff вместе с patch - никогда такой проблемы небыло.

Ну ведь не с самого рождения ты их используешь, верно? ;) Когда-то ты и слов таких не знал.

Перед применением изменений всегда просматриваю файл патча и если что-то не так, я это сразу же вижу.

А зачем сложно, когда можно просто? В сравнительно небольших проектах, типа такого, что на ocStore сейчас делается, не вижу необходимости тратить время на это. Внес нужные изменения, проверил работоспособность - и льешь себе на продакшн измененные файлы.
Ссылка на комментарий
Поделиться на других сайтах


Ну ведь не с самого рождения ты их используешь, верно? ;) Когда-то ты и слов таких не знал.

Так ведь и разработчиком я не родился :)

А зачем сложно, когда можно просто? В сравнительно небольших проектах, типа такого, что на ocStore сейчас делается, не вижу необходимости тратить время на это. Внес нужные изменения, проверил работоспособность - и льешь себе на продакшн измененные файлы.

Возможностей напортачить есть много. Где-то лишнее что-то удалил, или что-то лишнее оставил, да и просто вспомнить где что поменял бывает полезно.

Так что считаю использование этих утилит просто необходимым если:

Если вы серьезно занимаетесь разработкой, а не просто "погулять вышли"

Ссылка на комментарий
Поделиться на других сайтах


  • 10 месяцев спустя...

А не проще ли использовать FTP Sync?

http://www.decodephp.com/2007/12/04/web-based-ftp-sync-tool-written-in-php/

Есть возможность запрещать синхронизацию для отдельных файлов/папок.

Ссылка на комментарий
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.