Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


aVadim

Recommended Posts

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

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

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

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

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

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.