<?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>funkensturm. &#124; Blog &#187; capistrano</title>
	<atom:link href="http://blog.funkensturm.de/category/capistrano/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.funkensturm.de</link>
	<description>Das funkensturm. Weblog</description>
	<lastBuildDate>Sat, 10 Apr 2010 13:17:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>cap deploy &#8220;permission denied&#8221; nach upgrade auf capistrano&#160;2.1</title>
		<link>http://blog.funkensturm.de/2008/01/09/cap-deploy-permission-denied-nach-upgrade-auf-capistrano-21/</link>
		<comments>http://blog.funkensturm.de/2008/01/09/cap-deploy-permission-denied-nach-upgrade-auf-capistrano-21/#comments</comments>
		<pubDate>Wed, 09 Jan 2008 20:58:59 +0000</pubDate>
		<dc:creator>Captain Future</dc:creator>
				<category><![CDATA[capistrano]]></category>
		<category><![CDATA[gems]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[permission denied]]></category>
		<category><![CDATA[upgrade]]></category>

		<guid isPermaLink="false">http://blog.funkensturm.de/2008/01/09/cap-deploy-permission-denied-nach-upgrade-auf-capistrano-21/</guid>
		<description><![CDATA[Hier habe ich endlich gefunden wieso aus heiterem Himmel bei einem cap deploy mit ssh und svn (und public key authentication) immer folgender Fehler auftrat: ** [err] Permission denied, please try again. ** [err] Permission denied, please try again. ** [err] Permission denied (publickey,password). ** [err] svn: Netzwerkverbindung wurde unerwartet geschlossen In die /config/deploy.rb muss [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://groups.google.com/group/capistrano/browse_thread/thread/13b029f75b61c09d" onclick="pageTracker._trackPageview('/outgoing/groups.google.com/group/capistrano/browse_thread/thread/13b029f75b61c09d?referer=');">Hier</a> habe ich endlich gefunden wieso aus heiterem Himmel bei einem <b>cap deploy</b> mit ssh und svn (und public key authentication) immer folgender Fehler auftrat:</p>
<p> ** [err] Permission denied, please try again.<br />
 ** [err] Permission denied, please try again.<br />
 ** [err] Permission denied (publickey,password).<br />
 ** [err] svn: Netzwerkverbindung wurde unerwartet geschlossen</p>
<p>In die <i>/config/deploy.rb</i> muss folgende Option mit aufgenommen werden:</p>
<p>   default_run_options[:pty] = true</p>
<p>Wenn ihr wissen wollt wieso, müsst ihr im <a href="http://groups.google.com/group/capistrano/browse_thread/thread/13b029f75b61c09d" onclick="pageTracker._trackPageview('/outgoing/groups.google.com/group/capistrano/browse_thread/thread/13b029f75b61c09d?referer=');">original Beitrag</a> nachschauen. Es hat mit den Rechten bei der shell zu tun und jetzt werden auch die user profile auf dem server vorher geladen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.funkensturm.de/2008/01/09/cap-deploy-permission-denied-nach-upgrade-auf-capistrano-21/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Capistrano 2 hinter den Vorhang&#160;gucken</title>
		<link>http://blog.funkensturm.de/2007/12/24/capistrano-2-hinter-den-vorhang-gucken/</link>
		<comments>http://blog.funkensturm.de/2007/12/24/capistrano-2-hinter-den-vorhang-gucken/#comments</comments>
		<pubDate>Sun, 23 Dec 2007 23:12:22 +0000</pubDate>
		<dc:creator>Captain Future</dc:creator>
				<category><![CDATA[capistrano]]></category>
		<category><![CDATA[quellcode]]></category>
		<category><![CDATA[source code]]></category>

		<guid isPermaLink="false">http://blog.funkensturm.de/2007/12/24/capistrano-2-hinter-den-vorhang-gucken/</guid>
		<description><![CDATA[Auf Railstrac habe ich diese wunderbare Datei gefunden, die mir endlich verrät, was genau hinter den cap tasks steckt: http://dev.rubyonrails.org/browser/tools/capistrano/lib/capistrano/recipes/deploy.rb]]></description>
			<content:encoded><![CDATA[<p>Auf Railstrac habe ich diese wunderbare Datei gefunden, die mir endlich verrät, was genau hinter den cap tasks steckt:<br />
<a href="http://dev.rubyonrails.org/browser/tools/capistrano/lib/capistrano/recipes/deploy.rb" target="_blank" onclick="pageTracker._trackPageview('/outgoing/dev.rubyonrails.org/browser/tools/capistrano/lib/capistrano/recipes/deploy.rb?referer=');">http://dev.rubyonrails.org/browser/tools/capistrano/lib/capistrano/recipes/deploy.rb</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.funkensturm.de/2007/12/24/capistrano-2-hinter-den-vorhang-gucken/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;Capistrano überschreibt meine Dateien&#160;immer!&#8221;</title>
		<link>http://blog.funkensturm.de/2007/12/23/capistrano-uberschreibt-meine-dateien-immer/</link>
		<comments>http://blog.funkensturm.de/2007/12/23/capistrano-uberschreibt-meine-dateien-immer/#comments</comments>
		<pubDate>Sun, 23 Dec 2007 21:16:02 +0000</pubDate>
		<dc:creator>Captain Future</dc:creator>
				<category><![CDATA[capistrano]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[tasks]]></category>
		<category><![CDATA[syslink]]></category>

		<guid isPermaLink="false">http://blog.funkensturm.de/2007/12/23/capistrano-uberschreibt-meine-dateien-immer/</guid>
		<description><![CDATA[Wer seit Neuestem mit Capistrano seine rails app deployed, der kam vielleicht auch schon dahinter, dass dann alle Dateien weg sind, die man in ein bestimmtes Verzeichnis geschrieben oder hochgeladen hat. &#8220;meinprojekt&#8221; ist im Folgenden das Verzeichnis auf dem Server, wohin deployed wurde. Standardmäßig ist das glaube ich /u/apps/meinprojekt. Also zum Beispiel meinprojekt/public/uploads wird nach [...]]]></description>
			<content:encoded><![CDATA[<p>Wer seit Neuestem mit Capistrano seine rails app deployed, der kam vielleicht auch schon dahinter, dass dann alle Dateien weg sind, die man in ein bestimmtes Verzeichnis geschrieben oder hochgeladen hat.</p>
<p>&#8220;meinprojekt&#8221; ist im Folgenden das Verzeichnis auf dem Server, wohin deployed wurde. Standardmäßig ist das glaube ich <tt>/u/apps/meinprojekt</tt>.</p>
<p>Also zum Beispiel <tt>meinprojekt/public/uploads</tt> wird nach dem deploy einfach gelöscht und alle Dateien sind weg (nicht wirklich weg, man muss nur im Verzeichnis <tt>meinprojekt/releases</tt> danach suchen ;).</p>
<p>Um das zu verhindern (<a href="http://blog.vixiom.com/2007/03/13/stop-uploaded-files-getting-deleted-with-capistrano/" onclick="pageTracker._trackPageview('/outgoing/blog.vixiom.com/2007/03/13/stop-uploaded-files-getting-deleted-with-capistrano/?referer=');">hier gefunden</a>) muss man im <tt>meinprojekt/shared</tt> Verzeichnis auf dem Server wo man es deployed hat die Verzeichnisse erstellen, die solche wichtigen Sachen enthalten.</p>
<p>Also z. B. <tt>mkdir meinprojekt/shared/public/uploads</tt>. Anschließend passt man seine deploy.rb wie folgt an:</p>
<p>task :after_update_code, :roles => :app do<br />
  run &#8220;ln -nfs #{deploy_to}/shared/public/uploads #{release_path}/public/uploads&#8221;<br />
end</p>
<p>Dadurch wird nachdem der Code deployed (also hochgeladen) wurde, ein Hardlink von dem deployten uploads-Verzeichnis auf <tt>/u/apps/meinprojekt/shared/public/uploads</tt> gemacht. Also sozusagen ein weiterverweisen auf das shared Verzeichnis.</p>
<p>Immer wenn jetzt jemand was hochläd, wird es in shared gespeichert, anstatt in current. Beim nächsten Deploy wird der Link wieder auf shared gesetzt und keine Daten gehen verloren.</p>
<p>Hier mal ein Beispiel für meine Gallery:</p>
<p>namespace :deploy do<br />
   [task :start...]<br />
   after &#8220;deploy:update_code&#8221;, :link_to_shared<br />
end</p>
<p># Create hard links to data in shared<br />
desc &#8220;Link in critical data&#8221;<br />
task :link_to_shared do<br />
  run &#8220;ln -nfs #{deploy_to}/shared/config/database.yml #{release_path}/config/database.yml&#8221;<br />
  run &#8220;ln -nfs #{deploy_to}/shared/backup #{release_path}/backup&#8221;<br />
  run &#8220;ln -nfs #{deploy_to}/shared/private #{release_path}/private&#8221;<br />
  run &#8220;ln -nfs #{deploy_to}/shared/public/images/gallery #{release_path}/public/images/gallery&#8221;<br />
  run &#8220;ln -nfs #{deploy_to}/shared/public/images/pending #{release_path}/public/images/pending&#8221;<br />
end</p>
<p>Super. Danke Capistrano 2, dass du das kannst :)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.funkensturm.de/2007/12/23/capistrano-uberschreibt-meine-dateien-immer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HowTo: MySQL 5, Mongrel, Capistrano +&#160;Subversion</title>
		<link>http://blog.funkensturm.de/2007/09/18/howto-mysql-5-mongrel-capistrano-subversion/</link>
		<comments>http://blog.funkensturm.de/2007/09/18/howto-mysql-5-mongrel-capistrano-subversion/#comments</comments>
		<pubDate>Tue, 18 Sep 2007 00:47:07 +0000</pubDate>
		<dc:creator>manuel</dc:creator>
				<category><![CDATA[capistrano]]></category>
		<category><![CDATA[gems]]></category>
		<category><![CDATA[introducing]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[mongrel]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://blog.funkensturm.de/2007/09/18/howto-mysql-5-mongrel-capistrano-subversion/</guid>
		<description><![CDATA[Update: Bis her war ein Fehler in diesem HowTo. MySQL muss natürlich als Server Version installiert werden ($ sudo port install mysql5 +server). Das Update betrifft nur den MySQL5 Bereich. Damit wir Ruby on Rails auch wirklich nutzen können, sollten wir noch ein paar Programme, Tools und Gems installieren. Als erstes wäre da MySQL, denn [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update:</strong> Bis her war ein Fehler in diesem HowTo. MySQL muss natürlich als Server Version installiert werden ($ sudo port install mysql5 +server). Das Update betrifft nur den MySQL5 Bereich.</p>
<p>Damit wir Ruby on Rails auch wirklich nutzen können, sollten wir noch ein paar Programme, Tools und Gems installieren.</p>
<p>Als erstes wäre da MySQL, denn wie wollen wir Datenbankgestütze Webentwicklung betreiben, wenn wir nicht mal einen Datenbank-Server und damit eine Datenbank haben&#8230;</p>
<p><strong>MySQL5</strong><br />
Da wir ja MacPorts installiert haben ist das ganze recht einfach. Um auf Nummer Sicher zu gehen, machen wir jedoch erst mal ein selfupdate für MacPorts und installieren erst dann MySQL5<br />
<code><br />
$ sudo port selfupdate<br />
$ sudo port install mysql5 +server<br />
$ sudo launchctl load -w /Library/LaunchDaemons/org.macports.mysql5.plist<br />
$ sudo chown -R mysql:mysql /usr/local/macports/var/db/mysql5<br />
$ sudo -u mysql mysql_install_db5<br />
</code></p>
<p>Jetzt am besten den Mac neu starten, dann kann man gleich sehen ob das LauchItem funktioniert.</p>
<p><strong>MySQL Native Bindings Gem</strong><br />
Jetzt kommt der Teil, der mich die meiste Zeit gekostet hat (dabei sollte er doch die Geschwindigkeit der MySQL Abfragen beschleunigen) und der Grund war, warum ich bis her ohne die Nativen Bindings auskommen musste.<br />
Das MySQL Gem ist irgendwie sehr unflexible, was die Pfade angeht und dazu kommt, dass MacPorts die MySQL Installation im MacPorts Verzeichnis nicht gebündelt ablegt sondern etwas zerfledert&#8230; anstelle eines einfachen gem install mysql war hier etwas mehr Finetuning nötig. Mittels der build-flags gelang mir dann aber auch das. Hier das Ergebnis:<br />
<code><br />
sudo gem install mysql -- \<br />
--with-mysql-dir=/usr/local/macports/lib/mysql5 \<br />
--with-mysql-lib=/usr/local/macports/lib/mysql5/mysql \<br />
--with-mysql-include=/usr/local/macports/include/mysql5/mysql<br />
</code></p>
<p><strong>NACHTRAG, ab November 2008 so:</strong><br />
<code><br />
sudo env ARCHFLAGS="-arch ppc" gem install mysql -- --with-mysql-lib=/opt/local/lib/mysql5/mysql --with-mysql-include=/opt/local/include/mysql5/mysql<br />
</code></p>
<p>jetzt wird man gefragt, welche Version man für die Installation wählen will. Nehmen wir also die neuste, zum jetzigen Zeitpunkt mysql 2.7 (ruby), also drücken wir die 3 (da wir uns ja auf einem Mac befinden fallen die mswin32 Versionen für uns raus)<br />
<code><br />
Select which gem to install for your platform (i686-darwin8.10.3)<br />
 1. mysql 2.7.3 (mswin32)<br />
 2. mysql 2.7.1 (mswin32)<br />
 3. mysql 2.7 (ruby)<br />
 4. mysql 2.6 (ruby)<br />
 5. Skip this gem<br />
 6. Cancel installation<br />
</code></p>
<p>Wenn man die build-flags nicht richtig setzt bekommt man solche Fehler:<br />
<code><br />
ERROR: Failed to build gem native extension.<br />
ruby extconf.rb install mysql<br />
checking for mysql_query() in -lmysqlclient... no<br />
checking for main() in -lm... yes<br />
checking for mysql_query() in -lmysqlclient... no<br />
checking for main() in -lz... yes<br />
checking for mysql_query() in -lmysqlclient... no<br />
checking for main() in -lsocket... no<br />
checking for mysql_query() in -lmysqlclient... no<br />
checking for main() in -lnsl... no<br />
checking for mysql_query() in -lmysqlclient... no<br />
</code><br />
und kann damit nicht so wirklich was anfangen&#8230; wie gesagt hat mich einiges an Zeit gekostet, weil auch Google dazu nicht richtig was sagt.</p>
<p>So nun sind auch die Bindings fertig und wir können uns anderen Dingen zuwenden.</p>
<p><strong>Mongrel</strong><br />
Mongrel ist der Webserver. Rails liefert zwar schon einen Webserver mit (Webrick) aber Mongrel hat für mich bis her einen sehr sehr großen Vorteil, man sieht im Development Mode alle Requests. Damit fällt das Debugging viel leichter, da man sogar die MySQL Requests mit allen Werten sieht. Also installieren wir das Mongrel Gem einfach.<br />
<code><br />
sudo gem install mongrel --include-dependencies<br />
</code><br />
es kommen wieder die von oben bekannten Abfragen zur Version und weil es Abhängigkeiten gibt, die erfüllt werden müssen, wird gleich noch fastthread installiert. Meine Versionen sind mongrel 1.0.1 (2 drücken) und fastthread 1.0 (1 drücken).<br />
<code><br />
Select which gem to install for your platform (i686-darwin8.10.3)<br />
 1. mongrel 1.0.1 (mswin32)<br />
 2. mongrel 1.0.1 (ruby)<br />
 3. mongrel 1.0 (mswin32)<br />
 4. mongrel 1.0 (ruby)<br />
 5. Skip this gem<br />
 6. Cancel installation<br />
> 2<br />
Select which gem to install for your platform (i686-darwin8.10.3)<br />
 1. fastthread 1.0 (ruby)<br />
 2. fastthread 1.0 (mswin32)<br />
 3. fastthread 0.6.4.1 (mswin32)<br />
 4. fastthread 0.6.4.1 (ruby)<br />
 5. Skip this gem<br />
 6. Cancel installation<br />
> 1<br />
</code></p>
<p>Gut damit haben wir neben dem MySQL-Server nun auch unseren Webserver. Was jetzt kommt ist erst mal nicht so wichtig aber wir installieren es mal, damit wir uns später keine Gedanken mehr drum machen müssen.</p>
<p><strong>Capistrano</strong><br />
Capistrano ist ein Deployment Tool, was einem die Arbeit des live gehens erheblich erleichtern soll. Ich hab es noch nicht benutzt und genau deshalb installiere ich es jetzt mit um es in den nächsten Tagen zu testen. Darüber wird es dann auch einen Post geben.<br />
Neben dem hoch laden der Dateien mittels SSH, kann man noch eigene Rake Tasks in Ruby schreiben, die dann z.B. einen Dump der alten Datenbank erstellen, bevor die neue eingespielt wird. Naja wie gesagt, bei mehr Erfahrungen gibt es auch dazu einen Post, jetzt erst mal die Installation:<br />
<code><br />
sudo gem install capistrano --include-dependencies<br />
</code><br />
Jetzt noch Termios, dass dafür sorgen soll, dass die Passwörter, die man in Capistrano eintippt, nicht von allen gelesen werden können. Ich weiß nicht, ob das notwendig ist aber weh tun tut es ja auch nicht also:<br />
<code><br />
sudo gem install termios --include-dependencies<br />
</code></p>
<p><strong>Subversion</strong><br />
Subversion ist auch so nen Ding, worüber alle reden, was ich aber bis zum jetzigen Zeitpunkt, außer für Plugin Installationen, nicht genutzt habe. Capistrano nutzt es auch, also installieren wir auch noch dieses Tool. Eigentlich ist es einfach eine Versionskontrolle und wird meistens eingesetzt, wenn man in einem Team programmiert (es zeigt einem Konflikte an, d.h. zwei Leute haben zur gleichen Zeit an einer Datei, den selben Teil verändert, jeder natürlich anders und die Änderungen würden verlohren gehen. Hier springt dann eben SVN ein und man kann den Konflikt auflösen.)<br />
<code><br />
sudo port install subversion<br />
</code></p>
<p>So damit haben wir eigentlich erst mal alles, was wir für die Entwicklung mit Ruby on Rails brauchen. Wenn es noch irgendwelche Sachen gibt, die man unbedingt braucht ab in die Kommentare damit.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.funkensturm.de/2007/09/18/howto-mysql-5-mongrel-capistrano-subversion/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
