Локальная отладка – нелокального высоконагруженного сайта

by SeoCoder on Июнь 16, 2009

Замучался я выборе оптимального php редактора и стиля работы. Требуется помощь моих читателей.

На все сервера у меня есть sftp, то есть ssh с private-key.  Очень много отлаживаемых сайтов. Задача отлаживать их в zend студии или eclipse.  Не ясно несколько вещей:

  1. Как сделать локальную копию сайта более автоматизированно, либо работать сразу на sftp. Найденное мною решение Target Management (RSE) не работает с ключами и не хочет подхватывать ключик который скормил я эклипсу.
  2. Как грамотно выкладывать сделанные изменения, поддерживая у себя версионность исходников?!
  3. Предположим мы сделали копию сайта у себя, как вы дебажите это?! Вообщем то необходимо зеркалирование сайта на локалку, чтобы править безболезнено. Задача не тривиальная. Или я чего то недопонимаю.

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

{ 15 comments… read them below or add one }

1 aktuba 06.16.09 at 14:25

Может я чего не понял, но в чем проблема, если держать локальную копию + svn? Т.е., все правки делаешь локально, когда оттестил – синхронизируешь папки с локали и удаленно. В промежутках, сбрасываешь все с локали на svn.

В результате, версии поддерживаются в svn (всегда можно откатиться), сайт работает сам по себе, а ты правишь все на локали.

P.S.: я раньше так делал. Но потом надоело лишние действия делать и стал править сразу на сайте =).

2 SeoCoder 06.16.09 at 14:31

Расскажи подробно о технологии.
Ведь к примеру чтобы отладить – надо еще и mysql часто синхронизировать.

3 aktuba 06.16.09 at 15:59

Вот как-раз базу я всегда использую одну ;) . С ней проще – можно выделить определенные записи и использовать только их в тестах.

4 SeoCoder 06.16.09 at 16:24

Хрен с ней базой, как все правильно настроить без нее )

5 Max Pozdeev 06.16.09 at 18:55

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

6 SeoCoder 06.16.09 at 20:19

2Max расскажи подробнее обо всем. Очень интересно

7 Chikey 06.16.09 at 20:23

Копал раньше по этой теме, ничего достойного кроме нетбинс не нашел

8 Max Pozdeev 06.16.09 at 23:18

Чтоб подробности все рассказать – целую статью придется написать. Здесь попробую конспективно по памяти, т.к. рабочего места под рукой нет, ибо на отдыхе.
Разработку веду локально (windows), на production (linux) никаких ручных изменений файлов.
В качестве редактора использую EditPlus, Eclipse не прижился. Версионирование ведется в Mercurial с помощью утилиты TortoiseHG. Ну и Denwer еще. База с production по мере необходимости копируется на локальный сервер (дампом или прямым копирования – по вкусу и размеру как говорится).
Процесс происходит примерно так.
Когда требуется добавить новую фичу (или старую) делаю клонирование репозитория (вручную через hg clone) и вношу правки туда, попутно отлаживая через Denwer. Обычно делается несколько коммитов.
Если требуется менять структуру базы, создаю новый (следующий по счету) .sql файл (вида db0003.sql), куда вписываю все изменения базы (ALTER TABLE… и т.п.). Если изменение базы посложнее – то добавляю новый апдейт-скрипт (dbupdate0003.php).
Когда фича готова и отлажена, сливаю эту ветку в основной репозиторий (вручную через TortoiseHG).
Затем средствами mercurial делаю патч-файл с измененными/добавленными/удаленными файлами (вручную через hg чегототам…). Тут надо помнить какая сейчас ревизия на production, можно заюзать теги.
Файлик заливается на production и там применяется с утилитой patch. Вносятся изменения в базу из .sql (mysql -u-p db < db0003.sql) и запускается апдейт-скрипт. Это делаю вручную, но можно автоматизироовать заливку и исполнение файлов на удаленном сервере с помощю утилит из комлекта Putty (они понимают ssh-ключи). Вобщем как то так :)

9 SeoCoder 06.17.09 at 01:00

Получается надо на всех серваках ставить сервер для svn.
Хочется по другому. Делать зеркалирование единожды. Держать у себя версионность и изменения уже аплоадить.
Так как приходится править чужое и серваков реально много разных.

10 Visual Ideas 06.17.09 at 03:56

НА самом деле без SVN такие задачки никак не выполнить…((((
А ставит его не так сложно, зато мона много юзверев сразу над проджектом работать и мона откатывать если на компе работает а на серваке почамуто нет…

11 Max Pozdeev 06.17.09 at 08:14

Например, на production-сервер заливать только патч с изменениями (diff-файл), для этого там только надо иметь утилиту patch. А патч делается средствами SVN, Mercurial и т.п.

12 Тормоз 06.19.09 at 19:05
13 BlackCat 06.21.09 at 21:41

У SVN есть интересная особенность – hook скрипты, они позволяют выполнять определенные действия до/после обновления. Можно написать скрипт который обновляет рабочий сервак после каждой фиксации изменений. Работа с SVN + БД – отдельная история которой посвящено много статей. Более подробно можно в гугле «Subversion Web разработка» и т.п.

14 SeoCoder 06.21.09 at 23:54

http://svnbook.red-bean.com/nightly/ru/svn-book.html вот шикарная книжка

15 medar 06.22.09 at 21:15

Да, mysql – это огромный геморрой в синхронизации проектов, ибо требует ручной работы, которая может повлечь ошибки..

В продвинутых системах типа RoR этот гемор решен путём описания БД на текстовом yaml, который синхронизируется при обновлениях.

Leave a Comment

You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">