<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>web-dev.info &#187; PhpED</title>
	<atom:link href="http://web-dev.info/category/phped/feed/" rel="self" type="application/rss+xml" />
	<link>http://web-dev.info</link>
	<description>Информация о web-разработке для web-разработчиков.</description>
	<lastBuildDate>Tue, 02 Sep 2008 19:55:08 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Умное закрепление правки для PhpED</title>
		<link>http://web-dev.info/2008/02/smarty-commit/</link>
		<comments>http://web-dev.info/2008/02/smarty-commit/#comments</comments>
		<pubDate>Fri, 22 Feb 2008 05:35:43 +0000</pubDate>
		<dc:creator>wd</dc:creator>
				<category><![CDATA[PhpED]]></category>
		<category><![CDATA[commit]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://web-dev.info/2008/02/smarty-commit/</guid>
		<description><![CDATA[SVN экономит время и труд разработчика&#160;&#8212;&#160;она позволяет возвращаться к любой точке разработки, быть везде и всегда в курсе проводимых работ и многое другое. Но как всякая система экономящая время SVN требует затрат этого времени на свое функционирование. Именно о такой затрате, а именно операции закрепления правки в хранилище, экономии труда в ходе ее, а также [...]]]></description>
			<content:encoded><![CDATA[<p>SVN экономит время и труд разработчика&nbsp;&mdash;&nbsp;она позволяет возвращаться к любой точке разработки, быть везде и всегда в курсе проводимых работ и <cite class="footNote" post="vvedenie-v-subversion" place="3">многое другое</cite>. Но как всякая система экономящая время SVN требует затрат этого времени на свое функционирование. Именно о такой затрате, а именно операции закрепления правки в хранилище, экономии труда в ходе ее, а также расширения возможностей разработчика по хранению данных и пойдет речь.</p>
<p>PhpED, как и приставка Professional, здесь&nbsp;&mdash;&nbsp;ключевые моменты. Если вы используете иной редактор кода, то вам придется иной раз совершать дополнительные действия. Вы также можете создать на основе предлагаемого решения расширение и для своей любимой платформы. Что касается Professional, то только эта версия редактора поддерживает возможность связывания редактора с внешними сриптами, т.е. <i>shell handler</i>.</p>
<h3 class="floatBar">Предпосылки</h3>
<p>Самым простым и частым действием при работе с любой рабочей копией является полное закрепление всех внесенных в нее изменений. Делается это чтобы разбивка работы на этапы отражала себя и в хранилище, когда каждая правка является неким законченным результатом работы. Пока никаких сложностей, если вы привыкли использовать SVN.</p>
<p>Сложность первая, главная и последняя&nbsp;&mdash;&nbsp;база данных. Мысль, обуславливающая сложность, заключается в том, что необходимо сохранять в хранилище не только код и данные в рабочей копии, но и содержимое базы. Делая &laquo;слепок&raquo; вашего кода в хранилище, было бы разумным сохранять также и данные базы, иначе не будет возможности вернуться к прошлым правкам полностью&nbsp;&mdash;&nbsp;&laquo;старый&raquo; код будет пытаться работать с &laquo;новыми&raquo; данными.</p>
<h3 class="floatBar">Постановка задачи</h3>
<p>Немного подумав, приходим к выводу, что нужно реализовать простое, желательно масштабируемое средство, вобравшее в себя все следующие возможности:</p>
<ol>
<li>Выполнение закрепления правки в хранилище;</li>
<li>получение дампа базы и помещение его поверх существующего в рабочей копии перед закреплением;</li>
<li>обеспечение отката дампа до предыдущего, если закрепление в хранилище не произошло из-за ошибки;</li>
<li>комментарии, описывающие правку, должны браться из файла, куда они помещались во время внесения изменений&nbsp;&mdash;&nbsp;хорошая практика аккуратной работы;</li>
<li>логирование происходящего с выдачей всех диагностических сообщений.</li>
</ol>
<h3 class="floatBar">Что необходимо для решения</h3>
<p>Нам потребуется довольно обширный круг программ, которые будут в отдельности решать поставленные задачи:</p>
<ol>
<li>Консольный клиент SVN. Вне зависимости от <cite class="footNote" post="vvedenie-v-subversion" place="4">типа установки</cite>, если вы уже используете локальную инсталляцию этой системы контроля версий, то такой клиент у вас уже есть&nbsp;&mdash;&nbsp;это <span class="filePath">bin/svn.exe</span> в директории куда вы установили SVN. В ином случае вам необходимо будет его установить, причем совершенно не обязательно для использования в виде интеграции с Apache&nbsp;&mdash;&nbsp;просто установить, пусть лежит;</li>
<li>дампер баз данных&nbsp;&mdash;&nbsp;утилита конкретная каждая для своей СУБД и призванная, в зависимости от своих опций, создавать набор SQL-инструкций полностью отражающих структуру и/или данные базы;</li>
<li>PhpED Professional;</li>
<li>установленный и настроенный php пятой версии.</li>
</ol>
<p>Что касается серверов, то трудно представить себе web-разработчика, не имеющего на локальной машине тестовых серверов: http, БД и каких-либо других, по потребностям. Настолько трудно, что и пытаться не будем.</p>
<h6>сужаем круг</h6>
<p class="notice">В случае использования на локальной машине системы подобной <a href="http://denwer.ru">denwer</a> ответ на вопрос о СУБД однозначен&nbsp;&mdash;&nbsp;MySQL. Вообще, это практически стандарт в области web, таким образом, будем везде подразумевать именно ее. Требование к php пятой версии обусловлена двумя причинами: &laquo;давно пора&raquo; и &laquo;у нас он есть, даже если у нас его нет&raquo; о чем чуть позже.</p>
<p>В отношении SVN можно поступить так, как об этом говорилось выше или же установить его полностью для локального использования, о чем уже заходила беседа ранее в статье &laquo;<a href="/vvedenie-v-subversion">Введение в Subversion</a>&raquo;.</p>
<h3 class="floatBar">От теории к практике</h3>
<p>Для начала следует убедиться, что PhpED установлен с поддержкой как минимум одного php5. Если у вас в директории, куда был установлен редактор, имеется поддиректория с именем <span class="filePath">php5</span>, то все в порядке. Если это не так, то есть два пути:</p>
<ul>
<li>переустановить PhpED;</li>
<li>если вы и так используете для своей работы php5, то ничего не мешает использовать его и в наших целях, т.е. оставить в этом отношении PhpED в покое.</li>
</ul>
<p>Настройка путей ОС также необходимый шаг. SVN <acronym title="Command Line Interface">CLI</acronym> и <span class="command">mysqldump</span> можно, а в нашем случае и нужно, использовать из любой директории, если внести пути, по которым они расположены, в системную переменную <i>PATH</i>.</p>
<h3 class="floatBar">Установка и настройка скрипта</h3>
<p>Получить скрипт можно двумя путями&nbsp;&mdash; скачать <a href="/wp-content/uploads/2008/02/smartycommit.rar" title="Архив smartyCommit">архив</a> или взять непосредственно из <a href="http://svn.web-dev.info/repos/smartyCommit">репозитория</a> (<a href="http://web-dev.info/websvn/listing.php?path=%2FsmartyCommit%2F&#038;sc=1#_smartyCommit_">websvn</a>).</p>
<p>Поместите директорию <span class="filePath">smartyCommit</span> из архива в любое место на жестком диске. Можно порекомендовать размещать расширяющие функциональность PhpED скрипты в поддиректорию scripts редактора, но это&nbsp;&mdash;&nbsp;дело вкуса.</p>
<p>В настройках PhpED в разделе <span class="filePath">Tools/Integration</span> одноименной кнопкой создайте меню, задав любое нравящееся вам имя, например <i>ext</i>. В этом меню мы будем хранить наши собственные срипты. Далее нужно создать подменю, которое и будет командой вызываемой из редактора. После создания команды необходима настройка до состояния отраженного на рисунке ниже, однако обратите внимание, что потребуется указать свой путь к скрипту и выбрать нужный вам хоткей, которые могут быть отличными от тех, что приведены.</p>
<p class="image"><img src="/wp-content/uploads/2008/02/commandparams.gif" width="625" height="916" alt="Настройки команды в PhpED" /></p>
<p>Команда будет вызываться для активного проекта (в закладке Workspace он выделен жирным), а значит, показывать команду нужно только в <span class="filePath">Tools/Scripts</span>, что и отражено в установках опций <i>Show this command *</i>. Скрипт не будет логировать никаких данных, кроме ошибок, но <i>Redirect Output stream to log window</i> нужно выбрать все равно.</p>
<p>Выбор <i>shell</i>-обработчика обусловлен тем, что для выбранной работы нам подходят только <i>SRV</i> и <i>Shell</i>, но <i>SRV</i> открывает всегда новую вкладку со своим выводом в то время как решено было использовать log window.</p>
<h6>может все же SRV?</h6>
<p class="notice">Возможно. Я интенсивно использую log window, однако после рецензирования этой статьи пришел к выводу, что многим людям было бы приятнее работать с выводом в виде html, а это SRV. Кстати, переход можно сделать самостоятельно, наследуя класс и переопределяя методы вывода.</p>
<p>Командная строка содержит путь к выполняющему работу скрипту и ряд макропеременных в виде <i>@varName@</i> справку по которым можно получить посредством кнопки <i>Show macros</i>. Специальной переменной является переменная вида <i>@Proj (varName)@</i> значение которой берётся на закладке <i>Custom</i> свойств проекта (<span class="filePath">Project/Project Properties</span>) (имейте ввиду, что на закладке <a href="#nuanceCustomVar">переменной может и не оказаться</a>). С установкой покончено.</p>
<p>В указании на отправную точку работы&nbsp;&mdash;&nbsp;директорию рабочей копии мы будем опираться на проекты PhpED. Чаще всего под некий сайт или работу выделяется отдельное рабочее пространство (Workspace) в котором существует один или несколько проектов.</p>
<h6>почему несколько?</h6>
<p class="notice">Иногда удобно располагать все служебные файлы, библиотеки, настройки выше уровня <i>DocumentRoot</i>, что повышает безопасность. Такой подход сказывается на организации удаленной отладки, что и влияет на количество проектов в рабочем пространстве. Подробнее обо всех способах можно узнать из <a href="http://support.nusphere.com/viewtopic.php?t=2135">HOWTO: Set project mapping</a>.</p>
<p>В свойства проекта необходимо установить значение переменной <i>svnRoot</i> таким образом, чтобы она содержала путь к рабочей копии. Если у вас несколько проектов, то этот шаг необходимо проделать для каждого проекта т.к. неизвестно какой из них будет активным в любой момент времени.</p>
<p>Время настроек задачи: имя БД, логины, пароли и другие данные, которые меняются от задачи к задаче. Значения таких опций устанавливается посредством конфигурационного файла, располагающимся в корне рабочей копии и обычно находящимся в игнор-листе SVN. Файл имеет имя <span class="filePath">peScripts.options.php</span> и представляет собой обычный php-скрипт с одним простым массивом. Пример полного массива приведен ниже, причем все указанные значения являются значениями по умолчанию, как если бы опция отсутствовала в вашем варианте массива.</p>
<pre name="code" class="php">&lt;?php
$smartyCommit = array(
	'db' =&gt; array(
		'host'     =&gt; 'localhost',
		'user'     =&gt; '',
		'password' =&gt; '',
		'name'     =&gt; ''  //database name
	),
	'dump' =&gt; array(
		'params' =&gt; '--allow-keywords --no-create-db --quote-names', //dumper command lines additional params
		'file'   =&gt; 'dump.sql' //file where dump will store
	),
	'svn' =&gt; array(
		'params'         =&gt; '--no-auth-cache',  //svn commit command lines additional params
		'fileLogMessage' =&gt; 'logs/commit.message', //file with commit messages. Note: path is _relative_ from svnRoot
		'user'           =&gt; '',
		'password'       =&gt; '',
		'log'            =&gt; 'logs/smartyCommit.log' //file where svn commit log will stored. Note: path is _relative_ from svnRoot
	),
	'dirTmp' =&gt; 'c:/windows/temp/'
);
?&gt;</pre>
<p>По сути это все. Теперь по хоткею команды будет произведено дампирование базы данных, а затем последующая фиксация всей рабочей копии в хранилище. Если на каком-то этапе произойдет ошибка, то будет произведен откат до состояния как если бы команда вообще не была выполнена.</p>
<p>Если у вас возникли какие-либо проблемы, то проверьте все ли правильно вы сделали по установке и настройке, обращая особое внимание на пути, задаваемые в настройках.</p>
<h3 class="floatBar">Подводные камни и нюансы</h3>
<ol>
<li>Макропеременная <i>@php5@</i>, в отличие от <i>@php@</i>, которая указывает на <a href="http://ru2.php.net/manual/ru/features.commandline.php">CLI</a> версию php4, ссылается на <acronym title="Common Gate Interface">CGI</acronym> вариант. Это следует учитывать, так как в эти версии довольно сильно разнятся;</li>
<li><span class="command">mysqldump</span> читает конфигурационный файл СУБД, если вы указали в нем кодировки, то нет необходимости сообщать о них <span class="command">mysqldump</span> отдельно;</li>
<li>если команда расширения PhpED не указана как включаемая в <span class="filePath">Tools</span>, то она не будет выполняться по выбранному для нее хоткею;</li>
<li id="nuanceCustomVar">означить макропеременную <i>someVar</i> на закладке <i>Custom</i> свойств проекта станет возможно только с использованием <i>@Proj (someVar)@</i> в командах. Общий принцип&nbsp;&mdash;&nbsp;сначала заявите об использовании, затем означьте;</li>
<li>если значение макропеременной оставить пустым, то будет передано ее имя;</li>
<li>при выполнении длительной операции PhpED выдает соответствующее окошко с прогресс баром. Используйте sleep () для отладки;</li>
<li>если в свойствах команды отключено перенаправление потока Output в log window, то даже с активированным перенаправлением потока Error ошибки не будут попадать в log window&nbsp;&mdash;&nbsp;возможности писать в это окно не будет вовсе;</li>
<li>только Professional версия редактора поддерживает <i>shell</i> и <i>SRV</i> обработчики;</li>
<li>конечные слэши в путях к различным объектам можно как указывать, так и опускать&nbsp;&mdash;&nbsp;скрипт позаботится об их верном количестве;</li>
<li>файл с комментариями для <span class="command">svn commit</span> должен находиться в активном проекте, если вы хотите запускать срипт, находясь на его закладке. Обычно это нечасто at once встречающийся нюанс.</li>
</ol>
<h3 class="floatBar">Заключение</h3>
<p>Надстройка создавалась из соображения аккуратного ведения работы: тщательное комментирование, необходимость версионирования модели данных. Практически необходимо лишь выполнять первое требование&nbsp;&mdash;&nbsp;держать открытым в отдельной закладке файл с комментариями к правке и записывать в него свои действия. Как только это необходимо&nbsp;&mdash;&nbsp;делать фиксацию. Остальное возьмет на себя скрипт.</p>
]]></content:encoded>
			<wfw:commentRss>http://web-dev.info/2008/02/smarty-commit/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
