<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Shiny happy people coding : Tag capistrano, tout sur capistrano</title>
    <link>http://blog.shingara.fr</link>
    <atom:link type="application/rss+xml" rel="self" href="http://blog.shingara.fr/tag/capistrano.rss"/>
    <language>fr-fr</language>
    <ttl>40</ttl>
    <description>codons avec le sourire</description>
    <item>
      <title>Sortie de la premi&#232;re version de Oupsnow 0.1.0</title>
      <description>&lt;p&gt;Je suis assez content de vous pr&#233;senter &lt;a href=&quot;http://oupsnow.rubyforge.org/&quot;&gt;Oupsnow&lt;/a&gt;. En effet, apr&#232;s avoir particip&#233; &#224; redmine et l'avoir utilis&#233;, j'ai d&#233;cid&#233; de cr&#233;er mon propre bug tracker. Je trouvais de plus en plus de d&#233;fauts &#224; Redmine qui n'&#233;tait pas combl&#233;. Il est tr&#232;s fortement inspir&#233; de Lighthouse qui a l'avantage d'&#234;tre vraiment simple d'utilisation.&lt;/p&gt;

&lt;p&gt;Voici donc la premi&#232;re version qui sort apr&#232;s 2 mois de d&#233;veloppement. Elle est encore loin d'&#234;tre un produit compl&#232;tement fini. Mais elle commence &#224; avoir un d&#233;but de fonctionnalit&#233; suffisante. De plus Oupsnow est un produit r&#233;alis&#233; avec Merb. J'ai ainsi pu d&#233;couvrir et approfondir Merb gr&#226;ce &#224; ce projet.&lt;/p&gt;

&lt;p&gt;Dans la prochaine release, j'am&#233;liorerais un peu l'administration. Je cr&#233;erais aussi un convertisseur de Redmine vers Oupsnow. Cela entrainera ma migration vers Oupsnow &#224; la place de redmine pour ma &lt;a href=&quot;http://dev.shingara.fr/&quot;&gt;plateforme de d&#233;veloppement&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;J'ai mis en place une &lt;a href=&quot;http://oupsnow.shingara.fr&quot;&gt;version de d&#233;monstration&lt;/a&gt; pour vous que ayez une id&#233;e de ce que Oupsnow permet.&lt;/p&gt;

&lt;p&gt;En bonus, voici mon fichier &lt;code&gt;deploy.rb&lt;/code&gt; qui m'a permis de d&#233;ployer la version de d&#233;monstration de Oupsnow par capistrano&lt;/p&gt;

&lt;div class=&quot;CodeRay&quot;&gt;&lt;pre&gt;&lt;notextile&gt;&lt;span class=&quot;CodeRay&quot;&gt;set &lt;span class=&quot;sy&quot;&gt;:application&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;oupsnow&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:repository&lt;/span&gt;,  &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;git://github.com/shingara/oupsnow.git&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:domain&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;shingara.fr&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# If you aren't deploying to /u/apps/#{application} on the target&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# servers (which is the default), you can specify the actual location&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# via the :deploy_to variable:&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:deploy_to&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/var/rails/oupsnow-demo&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:deploy_via&lt;/span&gt;,            &lt;span class=&quot;sy&quot;&gt;:remote_cache&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:repository_cache&lt;/span&gt;,      &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;application&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;-src&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;



&lt;span class=&quot;c&quot;&gt;# If you aren't using Subversion to manage your source code, specify&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# your SCM below:&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# set :scm, :subversion&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:scm&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:git&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:git_enable_submodules&lt;/span&gt;, &lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;

set &lt;span class=&quot;sy&quot;&gt;:runner&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;rails&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:user&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;rails&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:use_sudo&lt;/span&gt;, &lt;span class=&quot;pc&quot;&gt;false&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:rack_up&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/etc/thin/oupsnow-demo.ru&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:merb_port&lt;/span&gt;, &lt;span class=&quot;i&quot;&gt;46000&lt;/span&gt;

role &lt;span class=&quot;sy&quot;&gt;:app&lt;/span&gt;, domain
role &lt;span class=&quot;sy&quot;&gt;:web&lt;/span&gt;, domain
role &lt;span class=&quot;sy&quot;&gt;:db&lt;/span&gt;,  domain, &lt;span class=&quot;sy&quot;&gt;:primary&lt;/span&gt; =&amp;gt; &lt;span class=&quot;pc&quot;&gt;true&lt;/span&gt;

task &lt;span class=&quot;sy&quot;&gt;:update_config&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:roles&lt;/span&gt; =&amp;gt; [&lt;span class=&quot;sy&quot;&gt;:app&lt;/span&gt;] &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt;
  run &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;ln -s &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;shared_path&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/config/database.yml &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;release_path&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/config/database.yml&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;

namespace &lt;span class=&quot;sy&quot;&gt;:deploy&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt;
  task &lt;span class=&quot;sy&quot;&gt;:start&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:roles&lt;/span&gt; =&amp;gt; [&lt;span class=&quot;sy&quot;&gt;:app&lt;/span&gt;] &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt;
    run &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;merb -u &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;user&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt; -G &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;user&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt; -d -c 1 -p &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;merb_port&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt; -n &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;application&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt; -a thin -e production -m '&lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;deploy_to&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/current/'&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;

  task &lt;span class=&quot;sy&quot;&gt;:stop&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:roles&lt;/span&gt; =&amp;gt; [&lt;span class=&quot;sy&quot;&gt;:app&lt;/span&gt;] &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt;
    run &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;merb -u &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;user&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt; -G &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;user&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt; -d -c 1 -K all -p &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;merb_port&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt; -n &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;application&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt; -a thin -e production -m '&lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;deploy_to&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/current/'&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;

  task &lt;span class=&quot;sy&quot;&gt;:restart&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:roles&lt;/span&gt; =&amp;gt; [&lt;span class=&quot;sy&quot;&gt;:app&lt;/span&gt;] &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt;
    deploy.stop
    deploy.start
  &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;

after &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;deploy:update_code&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:update_config&lt;/span&gt;&lt;/span&gt;&lt;/notextile&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;http://blog.shingara.fr/en/2009-01-21-oupsnow-0-1-0-released.html&quot;&gt;English translation&lt;/a&gt;&lt;/p&gt;

</description>
      <pubDate>Wed, 21 Jan 2009 18:54:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:184d9747-626f-4138-aa9a-ded4a4f65b16</guid>
      <author>cyril.mougel@gmail.com (Cyril Mougel)</author>
      <comments>http://blog.shingara.fr/sortie-de-la-premiere-version-de-oupsnow-0-1-0.html#comments</comments>
      <category>ruby</category>
      <category>ruby</category>
      <category>annonce</category>
      <category>merb</category>
      <category>capistrano</category>
      <category>oupsnow</category>
      <category>developpement</category>
      <link>http://blog.shingara.fr/sortie-de-la-premiere-version-de-oupsnow-0-1-0.html</link>
    </item>
    <item>
      <title>dev.shingara.fr mis &#224; jour avec Redmine 0.8</title>
      <description>&lt;p&gt;Avec la sortie de Redmine 0.8 hier, j'ai mis &#224; jour &lt;a href=&quot;http://dev.shingara.fr/&quot;&gt;ma plateforme de d&#233;veloppement&lt;/a&gt; sous cette nouvelle version. Pour ceux qui veulent des exemples, voici le fichier capistrano que j'utilise pour ce d&#233;ploiement. Il est pr&#233;vu pour r&#233;cup&#233;rer les sources &#224; partir de la branche 0.8 stable de redmine.&lt;/p&gt;

&lt;div class=&quot;CodeRay&quot;&gt;&lt;pre&gt;&lt;notextile&gt;&lt;span class=&quot;CodeRay&quot;&gt;require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;mongrel_cluster/recipes&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;

set &lt;span class=&quot;sy&quot;&gt;:application&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;redmine&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:repository&lt;/span&gt;,  &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;http://redmine.rubyforge.org/svn/branches/0.8-stable&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:domain&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;shingara.fr&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# If you aren't deploying to /u/apps/#{application} on the target&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# servers (which is the default), you can specify the actual location&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# via the :deploy_to variable:&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:deploy_to&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/var/rails/&lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;application&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# If you aren't using Subversion to manage your source code, specify&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# your SCM below:&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:scm&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:subversion&lt;/span&gt;

set &lt;span class=&quot;sy&quot;&gt;:runner&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;rails&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:user&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;rails&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:use_sudo&lt;/span&gt;, &lt;span class=&quot;pc&quot;&gt;false&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:mongrel_conf&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;current_path&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/config/mongrel_cluster.yml&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;

role &lt;span class=&quot;sy&quot;&gt;:app&lt;/span&gt;, domain
role &lt;span class=&quot;sy&quot;&gt;:web&lt;/span&gt;, domain
role &lt;span class=&quot;sy&quot;&gt;:db&lt;/span&gt;,  domain, &lt;span class=&quot;sy&quot;&gt;:primary&lt;/span&gt; =&amp;gt; &lt;span class=&quot;pc&quot;&gt;true&lt;/span&gt;

task &lt;span class=&quot;sy&quot;&gt;:update_config&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:roles&lt;/span&gt; =&amp;gt; [&lt;span class=&quot;sy&quot;&gt;:app&lt;/span&gt;] &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt;
  run &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;cp -Rf &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;shared_path&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/config/* &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;release_path&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/config/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;

after &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;deploy:update_code&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:update_config&lt;/span&gt;&lt;/span&gt;&lt;/notextile&gt;&lt;/pre&gt;&lt;/div&gt;

</description>
      <pubDate>Wed, 31 Dec 2008 09:34:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:d4e2a17b-bbce-404f-975e-c17179df71ba</guid>
      <author>cyril.mougel@gmail.com (Cyril Mougel)</author>
      <comments>http://blog.shingara.fr/dev-shingara-fr-mis-i-jour-avec-redmine-0-8.html#comments</comments>
      <category>Informatique</category>
      <category>redmine</category>
      <category>capistrano</category>
      <link>http://blog.shingara.fr/dev-shingara-fr-mis-i-jour-avec-redmine-0-8.html</link>
    </item>
    <item>
      <title>Migration sur Typo-5.1.3 et mise &#224; jours du script capistrano</title>
      <description>&lt;p&gt;Voil&#224;, aussit&#244;t sortie aussit&#244;t install&#233;e. Alors que &lt;a href=&quot;http://blog.typosphere.org/2008/08/31/typo-5-1-3-cartier-bresson-bugfix-is-out&quot;&gt;Typo-5.1.3&lt;/a&gt; est sortie dimanche, j'ai mis &#224; jour ce blog. Comment faire une migration si rapide ? Simple un bon script Capistrano :&lt;/p&gt;

&lt;div class=&quot;CodeRay&quot;&gt;&lt;pre&gt;&lt;notextile&gt;&lt;span class=&quot;CodeRay&quot;&gt;require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;mongrel_cluster/recipes&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;

set &lt;span class=&quot;sy&quot;&gt;:application&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;typo&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:repository&lt;/span&gt;,  &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;http://svn.typosphere.org/typo/trunk&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:domain&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;shingara.fr&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# If you aren't deploying to /u/apps/#{application} on the target&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# servers (which is the default), you can specify the actual location&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# via the :deploy_to variable:&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:deploy_to&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/var/rails/blog-typo&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# If you aren't using Subversion to manage your source code, specify&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# your SCM below:&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:scm&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:subversion&lt;/span&gt;

set &lt;span class=&quot;sy&quot;&gt;:runner&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;rails&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:user&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;rails&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:use_sudo&lt;/span&gt;, &lt;span class=&quot;pc&quot;&gt;false&lt;/span&gt;
set &lt;span class=&quot;sy&quot;&gt;:mongrel_conf&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;current_path&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/config/mongrel_cluster.yml&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;

role &lt;span class=&quot;sy&quot;&gt;:app&lt;/span&gt;, domain
role &lt;span class=&quot;sy&quot;&gt;:web&lt;/span&gt;, domain
role &lt;span class=&quot;sy&quot;&gt;:db&lt;/span&gt;,  domain, &lt;span class=&quot;sy&quot;&gt;:primary&lt;/span&gt; =&amp;gt; &lt;span class=&quot;pc&quot;&gt;true&lt;/span&gt;

task &lt;span class=&quot;sy&quot;&gt;:update_config&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:roles&lt;/span&gt; =&amp;gt; [&lt;span class=&quot;sy&quot;&gt;:app&lt;/span&gt;] &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt;
  run &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;cp -Rf &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;shared_path&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/config/* &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;release_path&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/config/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
  run &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;ln -s &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;shared_path&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/files &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;release_path&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/public/files&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;

after &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;deploy:update_code&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:update_config&lt;/span&gt;&lt;/span&gt;&lt;/notextile&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Il ne suffit plus que d'avoir dans le dossier /shared/ le dossier /config/ comprenant les fichiers de configurations : &lt;code&gt;database.yml&lt;/code&gt; et &lt;code&gt;mongrel_cluster.yml&lt;/code&gt;. Apr&#232;s &#224; chaque mises &#224; jours de typo : &lt;code&gt;cap deploy:migrations&lt;/code&gt;. Tout sera fait pour toi.&lt;/p&gt;

&lt;p&gt;C'est pas beau la vie en Ruby ?&lt;/p&gt;

</description>
      <pubDate>Mon, 01 Sep 2008 18:20:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:30ebaaf4-e4fa-4f51-a144-02bc8f83eb11</guid>
      <author>cyril.mougel@gmail.com (Cyril Mougel)</author>
      <comments>http://blog.shingara.fr/migration-sur-typo-5-1-3-et-mise-a-jours-du-script-capistrano.html#comments</comments>
      <category>ruby</category>
      <category>ruby_on_rails</category>
      <category>typo</category>
      <category>capistrano</category>
      <link>http://blog.shingara.fr/migration-sur-typo-5-1-3-et-mise-a-jours-du-script-capistrano.html</link>
    </item>
    <item>
      <title>Deployer un blog Typo gr&#226;ce &#224; Capistrano2</title>
      <description>&lt;p&gt;Voulant utiliser &lt;a href=&quot;http://www.capify.org/&quot;&gt;capistrano2&lt;/a&gt; et mettre en place un blog &lt;a href=&quot;http://typosphere.org/&quot;&gt;Typo&lt;/a&gt;, j'ai d&#233;cid&#233; de d&#233;ployer mon blog Typo gr&#226;ce &#224; Capistrano2. Je vais indiqu&#233; ici toutes les &#233;tapes que j'ai effectu&#233;es. Ce post aura ainsi un double int&#233;r&#234;t.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Expliquer comment deployer une application Typo avec Capistrano2&lt;/li&gt;
&lt;li&gt;Expliquer par l'exemple d'une utilisation de Capistrano2&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pour commencer Capistrano2 est vraiment tr&#232;s d&#233;pendant d'un syst&#232;me de versionning. Dans mon cas j'ai utilis&#233; le d&#233;p&#244;t subversion de Typo et comme je voulais utiliser leur version 4.1, j'ai r&#233;cup&#233;rer l'url suivante qui est le tag de la version 4.1:&lt;/p&gt;

&lt;pre&gt;
http://svn.typosphere.org/typo/tags/release_4_1/
&lt;/pre&gt;

&lt;h2&gt;Pr&#233;paration de l'application &#224; d&#233;ployer&lt;/h2&gt;

&lt;h3&gt;Pr&#233;paration en local&lt;/h3&gt;

&lt;p&gt;Il faut commencer d'abord par faire un checkout complet de la version que l'on d&#233;sire d&#233;ployer. Ca permet surtout d'avoir une sorte de miroir de la version qui sera sur le serveur et ainsi faire des modifications sur cette version pour test&#233; et ensuite les d&#233;ployer sur le serveur.&lt;/p&gt;

&lt;p&gt;On va maintenant commencer &#224; cr&#233;er un projet capistrano2. Pour cela, il suffit d'aller &#224; la racine du r&#233;pertoire de checkout et de lancer la commande :&lt;/p&gt;

&lt;pre&gt;capify&lt;/pre&gt;

&lt;p&gt;Gr&#226;ce &#224; cette commande le fichier &lt;code&gt;config/deploy.rb&lt;/code&gt; est cr&#233;e. C'est lui qui nous permettra de d&#233;finir la configuration de notre application sur le serveur distant. Le fichier &lt;code&gt;Capfile&lt;/code&gt; est lui aussi cr&#233;e &#224; la racine et il permet d'ajouter des t&#226;ches. Il suffit de le consid&#233;rer comme une sorte de fichier de RakeFile.&lt;/p&gt;

&lt;p&gt;Voici ce que j'ai mis dans mon fichier deploy.rb. Bien sur, il n'y avait pas ces informations &#224; la base&lt;/p&gt;

&lt;pre&gt;
set :application, &quot;typoblog-dev&quot;
set :repository,  &quot;http://svn.typosphere.org/typo/tags/release_4_1/&quot;

# If you aren't deploying to /u/apps/#{application} on the target
# servers (which is the default), you can specify the actual location
# via the :deploy_to variable:
set :deploy_to, &quot;/var/rails/#{application}&quot;

# If you aren't using Subversion to manage your source code, specify
# your SCM below:
#set :scm, :subversion

role :app, &quot;shingara.fr&quot;
role :web, &quot;shingara.fr&quot;
role :db,  &quot;shingara.fr&quot;, :primary =&gt; true
&lt;/pre&gt;

&lt;p&gt;Voici une explication de chaque champs&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;set :application =&gt; D&#233;fini le nom de l'application qu'on va &#234;tre d&#233;ploy&#233;. C'est surtout utilis&#233; pour le nom du r&#233;pertoire de d&#233;ploiement.&lt;/li&gt;
&lt;li&gt;set :repository =&gt; le chemin du d&#233;p&#244;t Subversion qui sera r&#233;cup&#233;r&#233; lors du d&#233;ploiement.&lt;/li&gt;
&lt;li&gt;set :deploy_to =&gt; D&#233;fini le r&#233;pertoire sur le serveur distant o&#249; seront plac&#233;s les sources de l'application&lt;/li&gt;
&lt;li&gt;set :scm =&gt; Le type de syst&#232;me de versionning qui permettra de r&#233;cup&#233;rer les sources. Par d&#233;faut il s'agit de subversion.&lt;/li&gt;
&lt;li&gt;role :xxx =&gt; permet de d&#233;finir les serveur o&#249; seront chaque r&#244;le. serveur web, mysql et fichier. Dans mon cas il s'agit du m&#234;me serveur.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Il ne reste plus qu'&#224; voir pour le fichier Capfile, mais je le ferais dans un second temps.&lt;/p&gt;

&lt;h3&gt;Pr&#233;paration sur le serveur&lt;/h3&gt;

&lt;p&gt;Il faut penser &#224; pr&#233;parer la base de donn&#233;e qui recevra les informations de notre blog. Il faut donc que la base et les acc&#232;s soient pr&#234;ts. C'est la seule manipulation r&#233;elle &#224; effectuer sur le serveur.&lt;/p&gt;

&lt;h2&gt;D&#233;ploiement&lt;/h2&gt;

&lt;p&gt;On pourrait faire simple pour d&#233;ployer notre application et faire ainsi :&lt;/p&gt;

&lt;pre&gt;
$cap deploy:setup
$cap deploy:migrations
&lt;/pre&gt;

&lt;p&gt;La premi&#232;re t&#226;che permettant de pr&#233;parer le terrain en cr&#233;ant les r&#233;pertoires de base. La deuxi&#232;me permettant que :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;les sources soient d&#233;pos&#233;es sur le serveur distant &lt;/li&gt;
&lt;li&gt;rake db:migrate soit lanc&#233;&lt;/li&gt;
&lt;li&gt;le serveur est lanc&#233; en fastcgi&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mais voil&#224;, rien ne fonctionnera, car il n'y a pas de fichier database.yml sur le serveur car il n'existe pas sur le d&#233;p&#244;t subversion. Il va donc falloir en ajouter un sur le serveur.&lt;/p&gt;

&lt;h3&gt;Cr&#233;ation de t&#226;ches personnalis&#233;es&lt;/h3&gt;

&lt;p&gt;Voici le fichier CapFile que j'ai ainsi cr&#233;&#233;.&lt;/p&gt;

&lt;pre&gt;
load 'deploy' if respond_to?(:namespace) # cap2 differentiator
load 'config/deploy'


after 'deploy:symlink', 'deploy:upload_database_config'
after 'deploy:symlink', 'deploy:upload_mongrel_cluster'

namespace :deploy do

  desc 'Upload the config database file in release path'
  task :upload_database_config do
    #Define a database file
    database = {'production' =&gt; {
            'database' =&gt; 'typo',
            'adapter' =&gt; 'postgresql',
            'host' =&gt; 'localhost',
            'username' =&gt; 'xxxx',
            'password' =&gt; 'xxxx'
        }
    }
    #upload
    put database.to_yaml, &quot;#{current_path}/config/database.yml&quot;, :mode =&gt; 0444
  end

end
&lt;/pre&gt;

&lt;p&gt;Dans ce fichier j'ai ainsi cr&#233;&#233; une nouvelle t&#226;che. Cette t&#226;che me permettra de cr&#233;er un fichier database.yml sur le serveur et ainsi en avoir un sp&#233;cifique &#224; mon serveur. J'ai aussi d&#233;fini que cette t&#226;che sera toujours lanc&#233;e apr&#232;s la t&#226;che deploy:symlink. T&#226;che qui est r&#233;alis&#233;e lors de la t&#226;che deploy.&lt;/p&gt;

&lt;p&gt;Pour cr&#233;er la t&#226;che d'envoi sur le serveur du fichier database.yml, j'ai utilis&#233; la m&#233;thode &quot;put&quot; de Capistrano. Elle se base sur le syst&#232;me de connexion au serveur pour envoyer des fichiers dessus. Avec la variable #{current_path}, j'ai pu d&#233;finir le chemin vers le dossier contenant les sources utilis&#233;es pour lancer l'application.&lt;/p&gt;

&lt;p&gt;Pour d&#233;finir que cette t&#226;che se lance apr&#232;s une autre t&#226;che Capistrano, il suffit tout simplement d'appeler la m&#233;thode after.&lt;/p&gt;

&lt;p&gt;Ca y est maintenant si vous relancez toute la proc&#233;dure que je vous ai indiqu&#233;e pr&#233;c&#233;demment avec les t&#226;ches Cap vous aurez votre application qui d&#233;marrera avec FastCGI.&lt;/p&gt;

&lt;h2&gt;Et avec Mongrel_Rails et Nginx&lt;/h2&gt;

&lt;p&gt;Personnellement, je ne passe pas par FastCGHI, j'utilise mongrel_rails et Nginx. Donc voici les modifications que j'ai r&#233;alis&#233;es pour que tout passe de la m&#234;me mani&#232;re.&lt;/p&gt;

&lt;p&gt;J'ai tout d'abord ajout&#233; des t&#226;ches Cap:&lt;/p&gt;

&lt;pre&gt;

after 'deploy:symlink', 'deploy:upload_mongrel_cluster'
namespace deploy do
  desc 'Upload the mongrel_cluster.yml in release path'
  task :upload_mongrel_cluster do
    mongrel_conf = {'environment' =&gt; 'production',
        'port' =&gt; 44000,
        'pid_file' =&gt; &quot;#{shared_path}/pids/mongrel.pid&quot;,
        'servers' =&gt; 4,
        'log_file' =&gt; &quot;#{shared_path}/log/mongrel.log&quot;}
    put mongrel_conf.to_yaml, &quot;#{current_path}/config/mongrel_cluster.yml&quot;
  end
  
  desc 'Start mongrel_rails'
  task :start do
    run &quot;cd #{current_path} &amp;&amp; mongrel_rails cluster::start&quot;
  end
  
  desc 'Stop mongrel_rails'
  task :stop do
    run &quot;cd #{current_path} &amp;&amp; mongrel_rails cluster::stop&quot;
  end
  
  desc 'Restart mongrel_rails'
  task :restart do
    run &quot;cd #{current_path} &amp;&amp; mongrel_rails cluster::stop &amp;&amp; mongrel_rails cluster::start&quot;
  end
end
&lt;/pre&gt;

&lt;p&gt;Une t&#226;che qui permet d'envoyer mon fichier mongrel_cluster.yml sur le serveur. Une t&#226;che qui d&#233;marre le serveur avec mongrel_cluster, une t&#226;che qui arr&#234;te le serveur et une t&#226;che qui le red&#233;marre. La t&#226;che d'envoi est bien s&#251;r apr&#232;s la t&#226;che de symlink. Par contre, pour les trois autres t&#226;ches, elle remplace en fait les originales qui lancaient FastCGI.&lt;/p&gt;

&lt;p&gt;Enfin il ne reste plus que la conf de nginx&lt;/p&gt;

&lt;pre&gt;
     upstream mongrel_blog_dev {
        server 127.0.0.1:44000;
        server 127.0.0.1:44001;
        server 127.0.0.1:44002;
        server 127.0.0.1:44003;
    }

    server {
        listen      80; 
        server_name blog.shingara.fr;
            
            
        location /log_typo {  
            alias /var/rails/typoblog-dev/log/;
            autoindex  on; 
        }   
            
        location / { 
            root /var/rails/typoblog-dev/current/public;
            # needed to forward user's IP address to rails
                proxy_set_header  X-Real-IP  $remote_addr;
            
            # needed for HTTPS
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect false;
            proxy_max_temp_file_size 0;

            #redirect blog to Feedburner
            if ($http_user_agent !~ FeedBurner) {
                rewrite  ^/xml/rss20/feed.xml$ http://feeds.feedburner.com/ProgDreamShiny;
                rewrite  ^/xml/rss20/comments/feed.xml$ http://feeds.feedburner.com/ProgDreamShinyComments;
            }
    
            # If the file exists as a static file serve it directly without
            # running all the other rewite tests on it
            if (-f $request_filename) {
                break;
            }
            if (!-f $request_filename){
                proxy_pass  http://mongrel_blog_dev;
            }


        }
    } 

&lt;/pre&gt;

</description>
      <pubDate>Fri, 28 Sep 2007 10:07:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:8be685e8-9a5e-40d2-a391-b5b2b71179e2</guid>
      <author>cyril.mougel@gmail.com (Cyril Mougel)</author>
      <comments>http://blog.shingara.fr/deployer-un-blog-typo-grace-a-capistrano2.html#comments</comments>
      <category>ruby</category>
      <category>ruby</category>
      <category>capistrano2</category>
      <category>deployement</category>
      <category>rubyonrails</category>
      <category>capistrano</category>
      <link>http://blog.shingara.fr/deployer-un-blog-typo-grace-a-capistrano2.html</link>
    </item>
  </channel>
</rss>
