<?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>Deployment | Nerdpress.org</title>
	<atom:link href="https://nerdpress.org/tag/deployment/feed/" rel="self" type="application/rss+xml" />
	<link>https://nerdpress.org</link>
	<description>...dev, tech problems and solutions.</description>
	<lastBuildDate>Sun, 06 Mar 2011 08:03:12 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>[Symfony 2] Sandbox/Standard Edition &#8211; bootstrap.php</title>
		<link>https://nerdpress.org/2011/03/06/symfony-2-sandboxstandard-edition-bootstrap-php/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 06 Mar 2011 08:03:12 +0000</pubDate>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Bootstrap]]></category>
		<category><![CDATA[symfony 2]]></category>
		<category><![CDATA[Symfony 2 Sandbox]]></category>
		<category><![CDATA[Symfony Standard Edition]]></category>
		<guid isPermaLink="false">https://nerdpress.org/?p=1394</guid>

					<description><![CDATA[<p>Wer sich wundert, woher die beiden Dateien &#8220;app/bootstrap.php&#8221; respektive &#8220;app/bootstrap_cache.php&#8221; im Standard-app-Verzeichnis der Sandbox kommen: Das Script unter bin/build_bootstrap.php generiert eben diese aus existierenden Sourcen. Das Script sollte im Projekt-Rootverzeichnis aufgerufen werden, also etwa so:$ php bin/build_bootstrap.php Das ganze dient schlicht dazu, den PHP-Autoloader zu entlasten (und ersetzt somit die core_compile.yml-Konfiguration aus der Symfony 1.x-Welt). &#8230; </p>
<p class="link-more"><a href="https://nerdpress.org/2011/03/06/symfony-2-sandboxstandard-edition-bootstrap-php/" class="more-link">Continue reading<span class="screen-reader-text"> "[Symfony 2] Sandbox/Standard Edition &#8211; bootstrap.php"</span></a></p>
The post <a href="https://nerdpress.org/2011/03/06/symfony-2-sandboxstandard-edition-bootstrap-php/">[Symfony 2] Sandbox/Standard Edition – bootstrap.php</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></description>
										<content:encoded><![CDATA[<p>Wer sich wundert, woher die beiden Dateien &#8220;app/bootstrap.php&#8221; respektive &#8220;app/bootstrap_cache.php&#8221; im Standard-app-Verzeichnis der Sandbox kommen: Das Script unter bin/build_bootstrap.php generiert eben diese aus existierenden Sourcen.<br />
<span id="more-1394"></span><br />
Das Script sollte im Projekt-Rootverzeichnis aufgerufen werden, also etwa so:<sourcecode lang="sh">$ php bin/build_bootstrap.php</sourcecode><br />
Das ganze dient schlicht dazu, den PHP-Autoloader zu entlasten (und ersetzt somit die core_compile.yml-Konfiguration aus der Symfony 1.x-Welt).</p>
<p>Natürlich spricht nichts dagegen, das Script als Vorlage für seinen eigenen genererate-bootstrap-code zu modifizieren.</p>The post <a href="https://nerdpress.org/2011/03/06/symfony-2-sandboxstandard-edition-bootstrap-php/">[Symfony 2] Sandbox/Standard Edition – bootstrap.php</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ant Ftp Task und NullPointerException</title>
		<link>https://nerdpress.org/2010/02/02/ant-ftp-task-und-nullpointerexception/</link>
		
		<dc:creator><![CDATA[Ivo Bathke]]></dc:creator>
		<pubDate>Tue, 02 Feb 2010 15:11:48 +0000</pubDate>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Ant]]></category>
		<guid isPermaLink="false">https://nerdpress.org/?p=799</guid>

					<description><![CDATA[<p>Ich benutze ja Ant zum deployen, noch jedenfalls, weil die Installation und Konfiguration mir doch immer mal wieder Kopfzerbrechen bereitet. := Damit hole ich die HEAD Rev oder ein stable tag aus SVN, mach noch ein paar Fileoperations, wie Live Configs reinkopieren, .htaccess vorbereiten etc. und jage die files dann, für die Standard Hosting Packete, &#8230; </p>
<p class="link-more"><a href="https://nerdpress.org/2010/02/02/ant-ftp-task-und-nullpointerexception/" class="more-link">Continue reading<span class="screen-reader-text"> "Ant Ftp Task und NullPointerException"</span></a></p>
The post <a href="https://nerdpress.org/2010/02/02/ant-ftp-task-und-nullpointerexception/">Ant Ftp Task und NullPointerException</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></description>
										<content:encoded><![CDATA[<p>Ich benutze ja Ant zum deployen, noch jedenfalls, weil die Installation und Konfiguration mir doch immer mal wieder Kopfzerbrechen bereitet. :=</p>
<p>Damit hole ich die HEAD Rev oder ein stable tag aus SVN, mach noch ein paar Fileoperations, wie Live Configs reinkopieren, .htaccess vorbereiten etc.<br />
und jage die files dann, für die Standard Hosting Packete, mit FTP hoch. Dabei benutze ich noch die <em>timediffauto</em> Option, um nur die geänderten Files hochzuladen.</p>
<p>Nachdem wir hier den DeployServer neu gemacht haben, schmiess der FTP Task allerdings eine <strong>NullPointerException</strong>, die ich mir nicht erklären konnte, eigentlich war alles wie vorher.<br />
Letztlich konnte ich es dann auf das <em>timediffauto</em> Attribut einkreisen und nach langem grübeln und googeln dann die Lösung:<br />
<span id="more-799"></span><br />
Wir haben ein deutsches Debian Lenny installiert, das war vorher nicht so, sondern Englisch.<br />
Die meisten Hosting Server scheinen auch Englische zu sein und da kam Ant ins straucheln.</p>
<p>Dank dieses <a href="http://www.mail-archive.com/dev@ant.apache.org/msg37208.html">Post</a> hab ich dann die build.xml angepaßt und diese Attribute eingefügt:</p>
<pre class="brush: xml; title: ; notranslate">
serverLanguageCodeConfig=&quot;en&quot; 
shortMonthNamesConfig=&quot;jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec&quot;
</pre>
<p>Wie es auch hier steht: <a href="http://ant.apache.org/manual/OptionalTasks/ftp.html">http://ant.apache.org/manual/OptionalTasks/ftp.html</a></p>
<p>Fertig sieht der Task dann so aus:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;target name=&quot;startFTPTest&quot; depends=&quot;check-cond&quot; if=&quot;test&quot;&gt;
		&lt;move file=&quot;${updateChannelTemp}/${SvnExportDir}/.test.htaccess&quot; tofile=&quot;${updateChannelTemp}/${SvnExportDir}/.htaccess&quot;/&gt;
		&lt;ftp server=&quot;${ftpSite}&quot; userid=&quot;${ftpUsername}&quot; password=&quot;${ftpPassword}&quot; serverLanguageCodeConfig=&quot;en&quot; shortMonthNamesConfig=&quot;jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec&quot; remotedir=&quot;${remoteDirTest}&quot; action=&quot;send&quot; verbose=&quot;yes&quot; passive=&quot;yes&quot; depends=&quot;yes&quot;&gt;	
			&lt;fileset dir=&quot;${updateChannelTemp}/${SvnExportDir}&quot; includes=&quot;**/*.php,**/*.css,**/*.html,**/*.js,**/*.gif,**/*.png,**/*.jpg,**/*.htaccess&quot; excludes=&quot;**/install/**,**/configure.php**,**/*.test.htaccess&quot;&gt;
			&lt;/fileset&gt;
		&lt;/ftp&gt;
&lt;/target&gt; 
</pre>
<p> und dann lief es wieder.</p>The post <a href="https://nerdpress.org/2010/02/02/ant-ftp-task-und-nullpointerexception/">Ant Ftp Task und NullPointerException</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Symfony und das Dojo Build System</title>
		<link>https://nerdpress.org/2010/01/30/symfony-und-das-dojo-build-system/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sat, 30 Jan 2010 15:18:47 +0000</pubDate>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Dojo Toolkit]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Dojo 1.4]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[Javascript]]></category>
		<guid isPermaLink="false">https://nerdpress.org/?p=787</guid>

					<description><![CDATA[<p>Das Dojo Toolkit bietet neben den offensichtlichen Features eines Full-Stack-Frameworks unter anderem mehrere &#8220;environment aware&#8221; Debug-Modi und eine Sammlung vonBuild-Scripten, die es dem Entwickler erlauben, das Framework zusammen mit den eigenen Frontend-Scripten und Stylesheets zu &#8220;kompilieren&#8221; und somit Bandbreite zu sparen bzw. Ladezeiten zu minimieren. Dojo Baukausten Standardmäßig lädt der Dojo-Core alle benötigten Pakete, die &#8230; </p>
<p class="link-more"><a href="https://nerdpress.org/2010/01/30/symfony-und-das-dojo-build-system/" class="more-link">Continue reading<span class="screen-reader-text"> "Symfony und das Dojo Build System"</span></a></p>
The post <a href="https://nerdpress.org/2010/01/30/symfony-und-das-dojo-build-system/">Symfony und das Dojo Build System</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></description>
										<content:encoded><![CDATA[<p>Das <a href="http://www.dojotoolkit.org/">Dojo Toolkit</a> bietet neben den offensichtlichen Features eines Full-Stack-Frameworks unter anderem mehrere &#8220;environment aware&#8221; Debug-Modi und eine Sammlung vonBuild-Scripten, die es dem Entwickler erlauben, das Framework zusammen mit den eigenen Frontend-Scripten und Stylesheets zu &#8220;kompilieren&#8221; und somit Bandbreite zu sparen bzw. Ladezeiten zu minimieren.</p>
<p><span id="more-787"></span></p>
<h3>Dojo Baukausten</h3>
<p>Standardmäßig lädt der Dojo-Core alle benötigten Pakete, die mittels dojo.require() angefordert werden, via XmlHttpRequest vom Server. Das kann je nach Projektumfang schonmal einige Sekunden in Anspruch nehmen, wenn plötzlich gefühlte 200 Sub-Requests beim Pageload abgefeuert werden.</p>
<p>Wenn es generell ans Deployment eines Web-Projekts geht, ist man daran interessiert, die Ladezeit von Scriptdateien oder Stylesheets zu minimieren, indem man zum Beispiel im ersten Schritt alle referenzierten Script-/CSS-Dateien in eine große Datei überträgt und damit konsolidiert. Dies kann mitunter mit Aufwand verbunden sein, wenn viele Scripte copied &amp; pasted werden müssen, außerdem scheint diese Vorgehensweise nicht besonders elegant, noch dazu Fehleranfällig.</p>
<p>Im zweiten Schritt nutzt man üblicherweise so etwas wie Code-Obfuscating oder Code-Minimizing. Diese Techniken dienen in erster Linie dazu, die Datenmenge von Script-Quellen zu minimieren und damit die Downloadzeiten zu beschleunigen. Dies geschieht wiederum mit Hilfe von Shellscripten oder Mini-Programmen, die Quelltexte parsen und dann je nach Voreinstellung White-Spaces und Kommentare entfernen oder den ganzen Code überarbeiten, indem bspw. Variablennamen durch möglichst kleine Buchstabenkombinationen ersetzt werden um die Zeilenlänge zu begrenzen. Der Betrachter sieht dann in der Quelltextansicht nur noch eine lange, einzeilige &#8220;Code-Wurst&#8221;.   &#8220;Disassembling&#8221; ist hier nur mit Aufwand möglich, aber prinzipiell eben das: möglich.</p>
<p>Die Dojo-Build-Tools automatisieren beide Schritte, wobei Schritt 1, die Code-Konsolidierung, durch das Dojo-Pakagesystem ermöglicht wird und Schritt 2 durch einen eingebauten Obfuscator, alternativ kann der <a href="http://code.google.com/closure/compiler/">Google Closure Compiler</a> verwendet werden. Die Werkzeuge bestehen aus einigen .jar-Dateien, die in jeder halbwegs aktuellen <a href="http://java.com/en/download/">Java Virtual Machine</a> laufen und mittels $ java &#8211;classpath &#8230; aufgerufen werden. Ein paar freundlicherweise beigelegte Shellscripte bzw. .bat-Dateien vereinfachen den Aufruf.</p>
<p>Die Datei build.sh beispielsweise benötigt mindestens einen Zielparameter &#8220;profile&#8221;, der den Pfad zur Profildatei enthält. Diese Datei besteht aus einem JSON-Objekt und konfiguriert die Projektumgebung. Hier kann der Entwickler alle Dateien bzw. Namensräume angeben, die der Compiler berücksichtigen soll.</p>
<p>Optional anzugeben ist die Behandlung von CSS-Dateien, die Code-Minimierungsstrategie und so weiter. Ein $ build.sh liefert eine gut dokumentierte Liste der möglichen Argumente.</p>
<p>Somit lassen sich automatisiert alle eigenen Javascripts und die des Dojo Frameworks zusammen mit CSS-Stylesheets für die Produktionsumgebung &#8220;fit machen&#8221; und optimieren. Dokumentiert ist das ganze wie immer mäßig auf dem <a href="http://dojocampus.org">dojocampus</a>.</p>
<h3>Dojo und Symfony</h3>
<p>Im Entwickleralltag möchte man seine Entwicklungsumgebungen zentral verwalten. Im Symfony-Kontext gibt es bspw. standardmäßig die Environments &#8220;Prod&#8221;, &#8220;Int&#8221; und &#8220;Dev&#8221;. Alle drei Umgebungen nutzen unterschiedliche Datenbanken, Loggingeinstellungen und so weiter. Natürlich liegt es nahe, die einzelnen Dojo-Builds ebenfalls &#8220;environment-aware&#8221; zu konfigurieren. Dies ist mit einigen einfachen Schritten erledigt, so könnte man bspw. das Script-Verzeichnis umgebungsabhängig verwalten. Doch so richtig optimal ist das nicht, und vor allem: Die Dojo-Build-Tools haben in der Form keine Entsprechnung als Symfony-Task, die Verheiratung wirkt also etwas widerwillig.</p>
<p>In so einem Fall lohnt sich natürlich der Blick ins Symfony Plugin Repository, und siehe da, das <a href="http://www.symfony-project.org/plugins/sfDojoPlugin">sfDojoPlugin</a> erledigt den Job. Installieren, Dojo als Dependency herunterladen (ein großer Vorteil, somit ist man nicht auf eine eventuell veraltete bundled Version angewiesen), Filter einfügen, fertig. Schon gibt es einen neuen Symfony Task Namespace &#8220;dojo&#8221;.</p>
<p>$ symfony dojo:build-for-prod</p>
<p>kompiliert dann die Javascripts für die Produktionsumgebung, ohne dass zusätzlicher Konfigurationsaufwand anfällt. Das ganze funktioniert durch eine Namensraum-Konvention der Ordner, in denen das Plugin einerseits die Dojo-Sourcen erwartet und andererseits die komplierten Scriptdateien ablegt.</p>
<p>Ein weiteres Killer-Feature ist das einfache Injizieren von PHP-Variablen in den Javascript-Context, das hier weitestgehend automatisiert abläuft. Interessant in diesem Zusammenhang wäre vielleicht noch zu wissen, in wie weit die I18N-Features des Symfony-Frameworks mit denen der Dojo-Welt verheiratet sind.</p>
<p>Dojo passt also ab Werk bereits hervorragend in jedes Symfony-Projekt, und mit dem sfDojoPlugin lässt sich die Integration nahtlos bewerkstelligen. Hat man sich einmal an die schlechte Dokumentation und die wirklich steile Lernkurve gewöhnt, lässt man mit Dojo meiner Meinung nach in Punkto Stabilität, Funktionsumfang und Projektunterstützung erstmal so ziemlich alles andere hinter sich.</p>
<h3>Links</h3>
<p>Dojo Toolkit: <a href="http://www.dojotoolkit.org/">http://www.dojotoolkit.org/</a></p>
<p>sfDojoPlugin: <a href="http://www.symfony-project.org/plugins/sfDojoPlugin">http://www.symfony-project.org/plugins/sfDojoPlugin</a></p>
<p>Eine Beispielimplementierung einer Webbasierten GUI-Komponente für die Build-Tools, leider auf Basis einer veralteten Version : <a href="http://build.dojotoolkit.org/0.4.2/web/buildscripts/webbuild/">http://build.dojotoolkit.org/0.4.2/web/buildscripts/webbuild/</a></p>
<p>Ebenfalls veraltet, aber sicher einen Blick wert: GUI für die Dojo Build Tools, Eclipse-basiert: <a href="http://shaneosullivan.wordpress.com/2007/01/29/second-beta-of-dojobuilder-released/">http://shaneosullivan.wordpress.com/2007/01/29/second-beta-of-dojobuilder-released/</a></p>The post <a href="https://nerdpress.org/2010/01/30/symfony-und-das-dojo-build-system/">Symfony und das Dojo Build System</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>symfony-check.org/</title>
		<link>https://nerdpress.org/2009/11/16/symfony-check-org/</link>
					<comments>https://nerdpress.org/2009/11/16/symfony-check-org/#comments</comments>
		
		<dc:creator><![CDATA[Ivo Bathke]]></dc:creator>
		<pubDate>Mon, 16 Nov 2009 11:56:40 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Symfony]]></category>
		<guid isPermaLink="false">https://nerdpress.org/?p=586</guid>

					<description><![CDATA[<p>Heute mal ein webtip: http://symfony-check.org/ Eine sehr nützliche Seite, die eigentlich nur eine Checklist ist. Check if your symfony application is ready for deployment Aber schön gemacht und sehr nützlich. Wie oft hab ich schon vergessen die ErrorPages zu customizen. Oder schön ist auch wenn man ne Email kriegt &#8220;Du benutzt symfony, richtig?&#8221;, weil man vergessen &#8230; </p>
<p class="link-more"><a href="https://nerdpress.org/2009/11/16/symfony-check-org/" class="more-link">Continue reading<span class="screen-reader-text"> "symfony-check.org/"</span></a></p>
The post <a href="https://nerdpress.org/2009/11/16/symfony-check-org/">symfony-check.org/</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></description>
										<content:encoded><![CDATA[<p>Heute mal ein webtip:<br />
<a href="http://symfony-check.org/" target="_blank"> http://symfony-check.org/</a></p>
<p>Eine sehr nützliche Seite, die eigentlich nur eine Checklist ist.</p>
<blockquote><p>Check if your symfony application is ready for deployment</p></blockquote>
<p>Aber schön gemacht und sehr nützlich.</p>
<p>Wie oft hab ich schon vergessen die ErrorPages zu customizen.<br />
Oder schön ist auch wenn man ne Email kriegt &#8220;Du benutzt symfony, richtig?&#8221;, weil man vergessen hat die Cookie Names anzupassen.</p>The post <a href="https://nerdpress.org/2009/11/16/symfony-check-org/">symfony-check.org/</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></content:encoded>
					
					<wfw:commentRss>https://nerdpress.org/2009/11/16/symfony-check-org/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
