Запись была отнесена к рубрике «PhpED» 22.02.2008, Пт в 09:35. Вы можете следить за общением по теме этой записи с помощью RSS 2.0 ленты. Вы можете оставить отзыв, или trackback с Вашего сайта.
SVN экономит время и труд разработчика — она позволяет возвращаться к любой точке разработки, быть везде и всегда в курсе проводимых работ и многое другое. Но как всякая система экономящая время SVN требует затрат этого времени на свое функционирование. Именно о такой затрате, а именно операции закрепления правки в хранилище, экономии труда в ходе ее, а также расширения возможностей разработчика по хранению данных и пойдет речь.
PhpED, как и приставка Professional, здесь — ключевые моменты. Если вы используете иной редактор кода, то вам придется иной раз совершать дополнительные действия. Вы также можете создать на основе предлагаемого решения расширение и для своей любимой платформы. Что касается Professional, то только эта версия редактора поддерживает возможность связывания редактора с внешними сриптами, т.е. shell handler.
Самым простым и частым действием при работе с любой рабочей копией является полное закрепление всех внесенных в нее изменений. Делается это чтобы разбивка работы на этапы отражала себя и в хранилище, когда каждая правка является неким законченным результатом работы. Пока никаких сложностей, если вы привыкли использовать SVN.
Сложность первая, главная и последняя — база данных. Мысль, обуславливающая сложность, заключается в том, что необходимо сохранять в хранилище не только код и данные в рабочей копии, но и содержимое базы. Делая «слепок» вашего кода в хранилище, было бы разумным сохранять также и данные базы, иначе не будет возможности вернуться к прошлым правкам полностью — «старый» код будет пытаться работать с «новыми» данными.
Немного подумав, приходим к выводу, что нужно реализовать простое, желательно масштабируемое средство, вобравшее в себя все следующие возможности:
Нам потребуется довольно обширный круг программ, которые будут в отдельности решать поставленные задачи:
Что касается серверов, то трудно представить себе web-разработчика, не имеющего на локальной машине тестовых серверов: http, БД и каких-либо других, по потребностям. Настолько трудно, что и пытаться не будем.
В случае использования на локальной машине системы подобной denwer ответ на вопрос о СУБД однозначен — MySQL. Вообще, это практически стандарт в области web, таким образом, будем везде подразумевать именно ее. Требование к php пятой версии обусловлена двумя причинами: «давно пора» и «у нас он есть, даже если у нас его нет» о чем чуть позже.
В отношении SVN можно поступить так, как об этом говорилось выше или же установить его полностью для локального использования, о чем уже заходила беседа ранее в статье «Введение в Subversion».
Для начала следует убедиться, что PhpED установлен с поддержкой как минимум одного php5. Если у вас в директории, куда был установлен редактор, имеется поддиректория с именем php5, то все в порядке. Если это не так, то есть два пути:
Настройка путей ОС также необходимый шаг. SVN CLI и mysqldump можно, а в нашем случае и нужно, использовать из любой директории, если внести пути, по которым они расположены, в системную переменную PATH.
Получить скрипт можно двумя путями — скачать архив или взять непосредственно из репозитория (websvn).
Поместите директорию smartyCommit из архива в любое место на жестком диске. Можно порекомендовать размещать расширяющие функциональность PhpED скрипты в поддиректорию scripts редактора, но это — дело вкуса.
В настройках PhpED в разделе Tools/Integration одноименной кнопкой создайте меню, задав любое нравящееся вам имя, например ext. В этом меню мы будем хранить наши собственные срипты. Далее нужно создать подменю, которое и будет командой вызываемой из редактора. После создания команды необходима настройка до состояния отраженного на рисунке ниже, однако обратите внимание, что потребуется указать свой путь к скрипту и выбрать нужный вам хоткей, которые могут быть отличными от тех, что приведены.

Команда будет вызываться для активного проекта (в закладке Workspace он выделен жирным), а значит, показывать команду нужно только в Tools/Scripts, что и отражено в установках опций Show this command *. Скрипт не будет логировать никаких данных, кроме ошибок, но Redirect Output stream to log window нужно выбрать все равно.
Выбор shell-обработчика обусловлен тем, что для выбранной работы нам подходят только SRV и Shell, но SRV открывает всегда новую вкладку со своим выводом в то время как решено было использовать log window.
Возможно. Я интенсивно использую log window, однако после рецензирования этой статьи пришел к выводу, что многим людям было бы приятнее работать с выводом в виде html, а это SRV. Кстати, переход можно сделать самостоятельно, наследуя класс и переопределяя методы вывода.
Командная строка содержит путь к выполняющему работу скрипту и ряд макропеременных в виде @varName@ справку по которым можно получить посредством кнопки Show macros. Специальной переменной является переменная вида @Proj (varName)@ значение которой берётся на закладке Custom свойств проекта (Project/Project Properties) (имейте ввиду, что на закладке переменной может и не оказаться). С установкой покончено.
В указании на отправную точку работы — директорию рабочей копии мы будем опираться на проекты PhpED. Чаще всего под некий сайт или работу выделяется отдельное рабочее пространство (Workspace) в котором существует один или несколько проектов.
Иногда удобно располагать все служебные файлы, библиотеки, настройки выше уровня DocumentRoot, что повышает безопасность. Такой подход сказывается на организации удаленной отладки, что и влияет на количество проектов в рабочем пространстве. Подробнее обо всех способах можно узнать из HOWTO: Set project mapping.
В свойства проекта необходимо установить значение переменной svnRoot таким образом, чтобы она содержала путь к рабочей копии. Если у вас несколько проектов, то этот шаг необходимо проделать для каждого проекта т.к. неизвестно какой из них будет активным в любой момент времени.
Время настроек задачи: имя БД, логины, пароли и другие данные, которые меняются от задачи к задаче. Значения таких опций устанавливается посредством конфигурационного файла, располагающимся в корне рабочей копии и обычно находящимся в игнор-листе SVN. Файл имеет имя peScripts.options.php и представляет собой обычный php-скрипт с одним простым массивом. Пример полного массива приведен ниже, причем все указанные значения являются значениями по умолчанию, как если бы опция отсутствовала в вашем варианте массива.
<?php $smartyCommit = array( 'db' => array( 'host' => 'localhost', 'user' => '', 'password' => '', 'name' => '' //database name ), 'dump' => array( 'params' => '--allow-keywords --no-create-db --quote-names', //dumper command lines additional params 'file' => 'dump.sql' //file where dump will store ), 'svn' => array( 'params' => '--no-auth-cache', //svn commit command lines additional params 'fileLogMessage' => 'logs/commit.message', //file with commit messages. Note: path is _relative_ from svnRoot 'user' => '', 'password' => '', 'log' => 'logs/smartyCommit.log' //file where svn commit log will stored. Note: path is _relative_ from svnRoot ), 'dirTmp' => 'c:/windows/temp/' ); ?>
По сути это все. Теперь по хоткею команды будет произведено дампирование базы данных, а затем последующая фиксация всей рабочей копии в хранилище. Если на каком-то этапе произойдет ошибка, то будет произведен откат до состояния как если бы команда вообще не была выполнена.
Если у вас возникли какие-либо проблемы, то проверьте все ли правильно вы сделали по установке и настройке, обращая особое внимание на пути, задаваемые в настройках.
Надстройка создавалась из соображения аккуратного ведения работы: тщательное комментирование, необходимость версионирования модели данных. Практически необходимо лишь выполнять первое требование — держать открытым в отдельной закладке файл с комментариями к правке и записывать в него свои действия. Как только это необходимо — делать фиксацию. Остальное возьмет на себя скрипт.
Случается, что (после переустановки ОС или иных кардинальных изменений) скрипт начинает выдавать ошибки транслитерации. В случае, если текст ошибки выдается в нечитаемом виде, то путь к svn.exe не прописан в переменной окружения PATH. Если же вы столкнетесь с чем-то подобным «svn commit failed. Commit failed (details follow): Safe data 'что-то' was followed by non-ASCII byte какой-то: unable to convert to/from UTF-8.», то необходимо создать переменную окружения APR_ICONV_PATH и задать в качестве ее содержимого путь к устанавливаемому вместе с Subversion пакету iconv (обычно это «C:\Program Files\Subversion\iconv»). Перезагрузка на всякий случай.
Прикольно конечно, я так поюзал немного но сразу же наткнулся на очень жирную проблему, к базе MySQL подключиться невозможно, значения по умолчанию не катят, где прописывается реально хост и т.п. для базы? Явно не только в аккаунте, так как оттуда прописываю а база все равно не работает, как будто ее и нет.
Последний листинг — пример настроек, FILENAME_OPTIONS — имя файла с ними. До листинга есть упоминание об этом. «В аккаунте» вы имеете ввиду в самом редакторе? Нусферовцы не потрудились создать более-менее расширяемой среды по скриптингу в редакторе, приходится все делать самостоятельно — данные по базе не берутся из редактора.
Отличная статья. Уважуха автору.