  
<div id="snippet_333" class="snippet">
  <h2><a href="/snippets/333-My-Sinatra-Capistrano-Capinatra-deployment-recipe" title="My Sinatra+Capistrano+Capinatra deployment recipe - Ruby - capistrano, sinatra, capinatra">My Sinatra+Capistrano+Capinatra deployment recipe</a></h2>
  <div class="details">
    <a style="background-color: #FFFF94;" href="http://snippets.aktagon.com/languages/124-Ruby">
      Ruby</a> posted 11 months ago by christian
          
  </div>

  <div class="body">
    <p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="Keyword">require</span> <span class="String"><span class="String">'</span>capistrano/version<span class="String">'</span></span>
<span class="line-numbers">   2 </span> <span class="Keyword">require</span> <span class="String"><span class="String">'</span>rubygems<span class="String">'</span></span>
<span class="line-numbers">   3 </span> <span class="Keyword">require</span> <span class="String"><span class="String">'</span>capinatra<span class="String">'</span></span>
<span class="line-numbers">   4 </span> load <span class="String"><span class="String">'</span>deploy<span class="String">'</span></span> <span class="Keyword">if</span> <span class="FunctionName">respond_to?</span>(<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>namespace</span>) <span class="LineComment"><span class="LineComment">#</span> cap2 differentiator</span>
<span class="line-numbers">   5 </span> 
<span class="line-numbers">   6 </span> <span class="LineComment"><span class="LineComment">#</span> set an app_class if you're using the more recent style of creating</span>
<span class="line-numbers">   7 </span> <span class="LineComment"><span class="LineComment">#</span> Sinatra apps, where app_class would be the name of your subclass</span>
<span class="line-numbers">   8 </span> <span class="LineComment"><span class="LineComment">#</span> of Sinatra::Base. if you're just requiring 'sinatra' and using the</span>
<span class="line-numbers">   9 </span> <span class="LineComment"><span class="LineComment">#</span> more traditional DSL style of Sinatra, then comment this line out.</span>
<span class="line-numbers">  10 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>app_class</span>, <span class="String"><span class="String">'</span>xxx<span class="String">'</span></span>
<span class="line-numbers">  11 </span> 
<span class="line-numbers">  12 </span> <span class="LineComment"><span class="LineComment">#</span> standard settings</span>
<span class="line-numbers">  13 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>app_file</span>, <span class="String"><span class="String">&quot;</span>xxx.rb<span class="String">&quot;</span></span>
<span class="line-numbers">  14 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>application</span>, <span class="String"><span class="String">&quot;</span>xxx<span class="String">&quot;</span></span>
<span class="line-numbers">  15 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>domain</span>, <span class="String"><span class="String">&quot;</span>xxx.com<span class="String">&quot;</span></span>
<span class="line-numbers">  16 </span> role <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>app</span>, domain
<span class="line-numbers">  17 </span> role <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>web</span>, domain
<span class="line-numbers">  18 </span> role <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>db</span>,  domain, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>primary</span> =&gt; <span class="BuiltInConstant">true</span>
<span class="line-numbers">  19 </span> 
<span class="line-numbers">  20 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>ssh_options</span>, { <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>forward_agent</span> =&gt; <span class="BuiltInConstant">true</span> }
<span class="line-numbers">  21 </span> 
<span class="line-numbers">  22 </span> <span class="LineComment"><span class="LineComment">#</span>set :use_sudo, false</span>
<span class="line-numbers">  23 </span> 
<span class="line-numbers">  24 </span> <span class="LineComment"><span class="LineComment">#</span> environment settings</span>
<span class="line-numbers">  25 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>user</span>, <span class="String"><span class="String">&quot;</span>xxx<span class="String">&quot;</span></span>
<span class="line-numbers">  26 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>group</span>, <span class="String"><span class="String">&quot;</span>www-data<span class="String">&quot;</span></span>
<span class="line-numbers">  27 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>deploy_to</span>, <span class="String"><span class="String">&quot;</span>/var/www/<span class="String"><span class="String">#{</span>application<span class="String">}</span></span><span class="String">&quot;</span></span>
<span class="line-numbers">  28 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>deploy_via</span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>copy</span> <span class="LineComment"><span class="LineComment">#</span>:remote_cache</span>
<span class="line-numbers">  29 </span> default_run_options[<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>pty</span>] <span class="Operator">=</span> <span class="BuiltInConstant">true</span>
<span class="line-numbers">  30 </span> 
<span class="line-numbers">  31 </span> <span class="LineComment"><span class="LineComment">#</span> scm settings</span>
<span class="line-numbers">  32 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>repository</span>, <span class="String"><span class="String">&quot;</span>git@xxx.com:xxx.git<span class="String">&quot;</span></span>
<span class="line-numbers">  33 </span> <span class="LineComment"><span class="LineComment">#</span>set :repository, &quot;file:///home/git/repositories/xxx.git&quot;</span>
<span class="line-numbers">  34 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>scm</span>, <span class="String"><span class="String">&quot;</span>git<span class="String">&quot;</span></span>
<span class="line-numbers">  35 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>branch</span>, <span class="String"><span class="String">&quot;</span>master<span class="String">&quot;</span></span>
<span class="line-numbers">  36 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>git_enable_submodules</span>, <span class="Number">1</span>
<span class="line-numbers">  37 </span> 
<span class="line-numbers">  38 </span> <span class="LineComment"><span class="LineComment">#</span> where the apache vhost will be generated</span>
<span class="line-numbers">  39 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>apache_vhost_dir</span>, <span class="String"><span class="String">&quot;</span>/etc/apache2/sites-enabled/<span class="String">&quot;</span></span>
<span class="line-numbers">  40 </span> 
<span class="line-numbers">  41 </span> namespace <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>deploy</span> <span class="Keyword">do</span>
<span class="line-numbers">  42 </span>   task <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>restart</span> <span class="Keyword">do</span>
<span class="line-numbers">  43 </span>     run <span class="String"><span class="String">&quot;</span>touch <span class="String"><span class="String">#{</span>current_path<span class="String">}</span></span>/tmp/restart.txt<span class="String">&quot;</span></span>
<span class="line-numbers">  44 </span>   <span class="Keyword">end</span>
<span class="line-numbers">  45 </span> <span class="Keyword">end</span>
</pre></p>
  </div>

  <div style="font-size: 0.8em;margin:0.5em;">
    
      Tagged <a href="/tags/73-capistrano">capistrano</a>, <a href="/tags/712-sinatra">sinatra</a>, <a href="/tags/734-capinatra">capinatra</a>
    
    
  </div>
</div>



  
<div id="snippet_160" class="snippet">
  <h2><a href="/snippets/160-How-to-use-Vlad-the-Deployer-with-git-nginx-mongrel-mongrel-cluster-and-Rails" title="How to use Vlad the Deployer with git, nginx, mongrel, mongrel_cluster and Rails - Ruby - vlad, deployer, deploy, capistrano, nginx, mongrel, mongrel_cluster">How to use Vlad the Deployer with git, nginx, mongrel, mongrel_cluster and Rails</a></h2>
  <div class="details">
    <a style="background-color: #FFFF94;" href="http://snippets.aktagon.com/languages/124-Ruby">
      Ruby</a> posted about 1 year ago by christian
          
  </div>

  <div class="body">
    <p>This is a draft&#8230;</p>


	<h2>Installing Vlad the Deployer</h2>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> gem install vlad
</pre></p>


	<h2>Configuring Vlad the Deployer</h2>


	<p>Add this to the end of <strong>RakeFile</strong>:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="Keyword">begin</span>
<span class="line-numbers">   2 </span>   <span class="Keyword">require</span> <span class="String"><span class="String">'</span>rubygems<span class="String">'</span></span>
<span class="line-numbers">   3 </span>   <span class="Keyword">require</span> <span class="String"><span class="String">'</span>vlad<span class="String">'</span></span>
<span class="line-numbers">   4 </span>   <span class="LibraryClassType">Vlad</span>.<span class="FunctionName">load</span> <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>scm</span> =&gt; <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>git</span>
<span class="line-numbers">   5 </span> <span class="Keyword">rescue</span> <span class="Variable">LoadError</span> =&gt; e
<span class="line-numbers">   6 </span>   puts <span class="String"><span class="String">&quot;</span>Unable to load Vlad <span class="String"><span class="String">#{</span>e<span class="String">}</span></span>.<span class="String">&quot;</span></span>
<span class="line-numbers">   7 </span> <span class="Keyword">end</span>
</pre></p>


	<p>Note that we&#8217;re telling Vlad to use git. <a href="http://snippets.aktagon.com/snippets/157-Installing-compiling-and-using-git-with-Ruby-on-Rails-on-Mac-OS-X-Leopard-and-Debian-Linux">This snippet</a>- gives you a quick introduction on how to use git with Rails.</p>


	<h2>Creating the deployment recipe</h2>


	<p>If you&#8217;re uncertain what these variables mean, have a look at the <a href="http://hitsquad.rubyforge.org/vlad/files/doco/variables_txt.html">docs</a>.
<a href="http://hitsquad.rubyforge.org/vlad/files/">This folder</a> is also worth a look, and don&#8217;t forget to take a peek at the vlad source code.</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="LineComment"><span class="LineComment">#</span></span>
<span class="line-numbers">   2 </span> <span class="LineComment"><span class="LineComment">#</span> General configuration</span>
<span class="line-numbers">   3 </span> <span class="LineComment"><span class="LineComment">#</span></span>
<span class="line-numbers">   4 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>ssh_flags</span>,             <span class="String"><span class="String">'</span>-p 666<span class="String">'</span></span>
<span class="line-numbers">   5 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>application</span>,           <span class="String"><span class="String">'</span>xxx.com<span class="String">'</span></span>
<span class="line-numbers">   6 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>domain</span>,                <span class="String"><span class="String">'</span>127.0.01<span class="String">'</span></span>
<span class="line-numbers">   7 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>deploy_to</span>,             <span class="String"><span class="String">'</span>/var/www/xxx.com<span class="String">'</span></span>
<span class="line-numbers">   8 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>repository</span>,            <span class="String"><span class="String">'</span>/var/lib/git/repositories/xxx.com/.git/<span class="String">'</span></span>
<span class="line-numbers">   9 </span> 
<span class="line-numbers">  10 </span> 
<span class="line-numbers">  11 </span> <span class="LineComment"><span class="LineComment">#</span></span>
<span class="line-numbers">  12 </span> <span class="LineComment"><span class="LineComment">#</span> Mongrel configuration</span>
<span class="line-numbers">  13 </span> <span class="LineComment"><span class="LineComment">#</span></span>
<span class="line-numbers">  14 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>mongrel_clean</span>,         <span class="BuiltInConstant">true</span>
<span class="line-numbers">  15 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>mongrel_command</span>,       <span class="String"><span class="String">'</span>sudo mongrel_rails<span class="String">'</span></span>
<span class="line-numbers">  16 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>mongrel_group</span>,         <span class="String"><span class="String">'</span>www-data<span class="String">'</span></span>
<span class="line-numbers">  17 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>mongrel_port</span>,          <span class="Number">9000</span>
<span class="line-numbers">  18 </span> set <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>mongrel_servers</span>,       <span class="Number">3</span>
<span class="line-numbers">  19 </span> 
<span class="line-numbers">  20 </span> <span class="LineComment"><span class="LineComment">#</span>set :mongrel_address,       '127.0.0.1'</span>
<span class="line-numbers">  21 </span> <span class="LineComment"><span class="LineComment">#</span>set(:mongrel_conf)          { '#{shared_path}/mongrel_cluster.conf' }</span>
<span class="line-numbers">  22 </span> <span class="LineComment"><span class="LineComment">#</span>set :mongrel_config_script, nil</span>
<span class="line-numbers">  23 </span> <span class="LineComment"><span class="LineComment">#</span>set :mongrel_environment,   'production'</span>
<span class="line-numbers">  24 </span> <span class="LineComment"><span class="LineComment">#</span>set :mongrel_log_file,      nil</span>
<span class="line-numbers">  25 </span> <span class="LineComment"><span class="LineComment">#</span>set :mongrel_pid_file,      nil</span>
<span class="line-numbers">  26 </span> <span class="LineComment"><span class="LineComment">#</span>set :mongrel_prefix,        nil</span>
<span class="line-numbers">  27 </span> <span class="LineComment"><span class="LineComment">#</span>set :mongrel_user,          'mongrel'</span>
<span class="line-numbers">  28 </span> 
<span class="line-numbers">  29 </span> <span class="LineComment"><span class="LineComment">#</span></span>
<span class="line-numbers">  30 </span> <span class="LineComment"><span class="LineComment">#</span> Customize Vlad to our needs</span>
<span class="line-numbers">  31 </span> <span class="LineComment"><span class="LineComment">#</span></span>
<span class="line-numbers">  32 </span> namespace <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>vlad</span> <span class="Keyword">do</span>
<span class="line-numbers">  33 </span> <span class="LineComment">  <span class="LineComment">#</span></span>
<span class="line-numbers">  34 </span> <span class="LineComment">  <span class="LineComment">#</span> Add an after_update hook</span>
<span class="line-numbers">  35 </span> <span class="LineComment">  <span class="LineComment">#</span></span>
<span class="line-numbers">  36 </span>   remote_task <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>update</span> <span class="Keyword">do</span>
<span class="line-numbers">  37 </span>     <span class="LibraryClassType">Rake</span>::<span class="FunctionName">Task</span>[<span class="String"><span class="String">'</span>vlad:after_update<span class="String">'</span></span>].<span class="FunctionName">invoke</span>
<span class="line-numbers">  38 </span>   <span class="Keyword">end</span>
<span class="line-numbers">  39 </span> 
<span class="line-numbers">  40 </span> <span class="LineComment">  <span class="LineComment">#</span></span>
<span class="line-numbers">  41 </span> <span class="LineComment">  <span class="LineComment">#</span> The after_update hook, which is run after vlad:update</span>
<span class="line-numbers">  42 </span> <span class="LineComment">  <span class="LineComment">#</span></span>
<span class="line-numbers">  43 </span>   remote_task <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>after_update</span> <span class="Keyword">do</span>
<span class="line-numbers">  44 </span> <span class="LineComment">  <span class="LineComment">#</span> Link to shared resources, if you have them in .gitignore</span>
<span class="line-numbers">  45 </span> <span class="LineComment">  <span class="LineComment">#</span>  run &quot;ln -s #{deploy_to}/shared/system/database.yml #{deploy_to}/current/config/database.yml&quot;</span>
<span class="line-numbers">  46 </span>   <span class="Keyword">end</span>
<span class="line-numbers">  47 </span> 
<span class="line-numbers">  48 </span> <span class="LineComment">  <span class="LineComment">#</span></span>
<span class="line-numbers">  49 </span> <span class="LineComment">  <span class="LineComment">#</span> Deploys a new version of your application</span>
<span class="line-numbers">  50 </span> <span class="LineComment">  <span class="LineComment">#</span></span>
<span class="line-numbers">  51 </span>   remote_task <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>deploy</span> =&gt; [<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>update</span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>migrate</span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>start_app</span>]
<span class="line-numbers">  52 </span> <span class="Keyword">end</span>
</pre></p>


	<h2>Setup the server</h2>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> $ rake vlad<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>setup</span>
</pre></p>


	<p>This will create the necessary folders and mongrel_cluster configuration file.</p>


	<h2>Deploy the application</h2>


	<p>Now deploy the application with vlad:deploy, which is a custom rake task that we added to the deployment recipe:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> $ rake vlad<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>deploy</span>
</pre></p>


	<h2>Copying your  SSH  public key to the remote server</h2>


	<p>Vlad uses ssh for executing commands on the remotely, and rsync for copying the build to your server, which means you&#8217;ll quickly grow tired of typing your password each time a command is run.</p>


	<p>This problem is solved by copying your public  SSH  keys to the remote server, <a href="http://snippets.aktagon.com/snippets/120-SSH-public-key-encryption-How-to-generate-the-key-and-how-to-copy-it-to-the-remote-machine">this snippet</a>- explains how to do exactly that.</p>
  </div>

  <div style="font-size: 0.8em;margin:0.5em;">
    
      Tagged <a href="/tags/401-vlad">vlad</a>, <a href="/tags/402-deployer">deployer</a>, <a href="/tags/403-deploy">deploy</a>, <a href="/tags/73-capistrano">capistrano</a>, <a href="/tags/143-nginx">nginx</a>, <a href="/tags/91-mongrel">mongrel</a>, <a href="/tags/379-mongrel-cluster">mongrel_cluster</a>
    
    
  </div>
</div>



  
<div id="snippet_29" class="snippet">
  <h2><a href="/snippets/29-Jump-start-a-Rails-project-with-Rails-Edge-Capistrano-Mongrel-and-Mercurial" title="Jump start a Rails project with Rails Edge, Capistrano, Mongrel and Mercurial - Shell Script (Bash) - rails, capistrano, mongrel, mercurial">Jump start a Rails project with Rails Edge, Capistrano, Mongrel and Mercurial</a></h2>
  <div class="details">
    <a style="background-color: #FFFF94;" href="http://snippets.aktagon.com/languages/131-Shell-Script-Bash-">
      Shell Script (Bash)</a> posted over 2 years ago by christian
          
  </div>

  <div class="body">
    <p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="LineComment"><span class="LineComment">#</span> Create a Rails project</span>
<span class="line-numbers">   2 </span> rails project -d sqlite3
<span class="line-numbers">   3 </span> cd project
<span class="line-numbers">   4 </span> <span class="LineComment"><span class="LineComment">#</span> Delete index file</span>
<span class="line-numbers">   5 </span> rm public/index.html
<span class="line-numbers">   6 </span> <span class="LineComment"><span class="LineComment">#</span> Use Rails edge. Use  rake rails:freeze:edge TAG=rel_1-2-3 to get a specific version.</span>
<span class="line-numbers">   7 </span> rake rails:freeze:edge
<span class="line-numbers">   8 </span> <span class="LineComment"><span class="LineComment">#</span> Add Capistrano configuration file</span>
<span class="line-numbers">   9 </span> capify .
<span class="line-numbers">  10 </span> <span class="LineComment"><span class="LineComment">#</span> Add Mongrel cluster configuration file</span>
<span class="line-numbers">  11 </span> sudo mongrel_rails cluster::configure -e production \
<span class="line-numbers">  12 </span>     --user mongrel --group mongrel \
<span class="line-numbers">  13 </span>     -c /var/www/project-xxx/current \
<span class="line-numbers">  14 </span>     -a 127.0.0.1 \
<span class="line-numbers">  15 </span>     -p 8000  \
<span class="line-numbers">  16 </span>     -N 3
<span class="line-numbers">  17 </span> <span class="LineComment"><span class="LineComment">#</span> Create a Mercurial repository</span>
<span class="line-numbers">  18 </span> hg init
<span class="line-numbers">  19 </span> <span class="LineComment"><span class="LineComment">#</span> Add project to repository</span>
<span class="line-numbers">  20 </span> hg commit -A --message <span class="String"><span class="String">&quot;</span>Project started<span class="String">&quot;</span></span>
<span class="line-numbers">  21 </span> <span class="LineComment"><span class="LineComment">#</span> Push changes to a remote repository</span>
<span class="line-numbers">  22 </span> hg push ssh://user@ip:port//var/mercurial/xxx
</pre></p>


	<p>Cloning is done with hg clone:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> hg clone ssh://user@ip:port//var/mercurial/xxx
</pre></p>
  </div>

  <div style="font-size: 0.8em;margin:0.5em;">
    
      Tagged <a href="/tags/9-rails">rails</a>, <a href="/tags/73-capistrano">capistrano</a>, <a href="/tags/91-mongrel">mongrel</a>, <a href="/tags/89-mercurial">mercurial</a>
    
    
  </div>
</div>



  
<div id="snippet_20" class="snippet">
  <h2><a href="/snippets/20-Capistrano-2-task-for-backing-up-your-MySQL-production-database-before-each-deployment" title="Capistrano 2 task for backing up your MySQL production database before each deployment - Ruby - ruby, rails, mysql, backup, capistrano">Capistrano 2 task for backing up your MySQL production database before each deployment</a></h2>
  <div class="details">
    <a style="background-color: #FFFF94;" href="http://snippets.aktagon.com/languages/124-Ruby">
      Ruby</a> posted over 2 years ago by christian
          
  </div>

  <div class="body">
    <p>This Capistrano task connects to your production database and dumps the contents to a file. The file is compressed and put in a directory specified with <strong>set :backup_dir,    &#8221;#{deploy_to}/backups&#8221;</strong>. This is a slight modification of <a href="http://pastie.caboo.se/42574">http://pastie.caboo.se/42574</a>. All credit to <a href="http://pastie.caboo.se/author/court3nay">court3nay</a>.</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> task <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>backup</span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>roles</span> =&gt; <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>db</span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>only</span> =&gt; { <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>primary</span> =&gt; <span class="BuiltInConstant">true</span> } <span class="Keyword">do</span>
<span class="line-numbers">   2 </span>   filename <span class="Operator">=</span> <span class="String"><span class="String">&quot;</span><span class="String"><span class="String">#{</span>backup_dir<span class="String">}</span></span>/<span class="String"><span class="String">#{</span>application<span class="String">}</span></span>.dump.<span class="String"><span class="String">#{</span><span class="LibraryClassType">Time</span><span class="String"><span class="String">.</span><span class="FunctionName">now</span></span><span class="String"><span class="String">.</span><span class="FunctionName">to_f</span></span><span class="String">}</span></span>.sql.bz2<span class="String">&quot;</span></span>
<span class="line-numbers">   3 </span>   text <span class="Operator">=</span> capture <span class="String"><span class="String">&quot;</span>cat <span class="String"><span class="String">#{</span>deploy_to<span class="String">}</span></span>/current/config/database.yml<span class="String">&quot;</span></span>
<span class="line-numbers">   4 </span>   yaml <span class="Operator">=</span> <span class="Variable">YAML</span>::<span class="FunctionName">load</span>(text)
<span class="line-numbers">   5 </span> 
<span class="line-numbers">   6 </span>   on_rollback { run <span class="String"><span class="String">&quot;</span>rm <span class="String"><span class="String">#{</span>filename<span class="String">}</span></span><span class="String">&quot;</span></span> }
<span class="line-numbers">   7 </span>   run <span class="String"><span class="String">&quot;</span>mysqldump -u <span class="String"><span class="String">#{</span>yaml<span class="String">[</span><span class="String"><span class="String">'</span>production<span class="String">'</span></span><span class="String">]</span><span class="String">[</span><span class="String"><span class="String">'</span>username<span class="String">'</span></span><span class="String">]</span><span class="String">}</span></span> -p <span class="String"><span class="String">#{</span>yaml<span class="String">[</span><span class="String"><span class="String">'</span>production<span class="String">'</span></span><span class="String">]</span><span class="String">[</span><span class="String"><span class="String">'</span>database<span class="String">'</span></span><span class="String">]</span><span class="String">}</span></span> | bzip2 -c &gt; <span class="String"><span class="String">#{</span>filename<span class="String">}</span></span><span class="String">&quot;</span></span> <span class="Keyword">do </span>|<span class="Variable">ch</span>, <span class="Variable">stream</span>, <span class="Variable">out</span>|
<span class="line-numbers">   8 </span>     ch.<span class="FunctionName">send_data</span> <span class="String"><span class="String">&quot;</span><span class="String"><span class="String">#{</span>yaml<span class="String">[</span><span class="String"><span class="String">'</span>production<span class="String">'</span></span><span class="String">]</span><span class="String">[</span><span class="String"><span class="String">'</span>password<span class="String">'</span></span><span class="String">]</span><span class="String">}</span></span><span class="UserDefinedConstant">\n</span><span class="String">&quot;</span></span> <span class="Keyword">if</span> out <span class="Operator">=~</span> <span class="String"><span class="String">/</span></span><span class="String">^Enter password:</span><span class="String"><span class="String">/</span></span>
<span class="line-numbers">   9 </span>   <span class="Keyword">end</span>
<span class="line-numbers">  10 </span> <span class="Keyword">end</span>
</pre></p>


	<p>To automatically backup your data before you deploy a new version add this to <strong>config/deploy.rb</strong>:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> task <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>before_deploy</span> <span class="Keyword">do</span>
<span class="line-numbers">   2 </span>     backup
<span class="line-numbers">   3 </span>   <span class="Keyword">end</span>
</pre></p>


	<p>To restore the backup run the following command:
<pre class="active4d"><span class="line-numbers">   1 </span> mysql database_name <span class="Operator">-</span>uroot <span class="Operator">&lt;</span> filename.<span class="FunctionName">sql</span>
</pre></p>
  </div>

  <div style="font-size: 0.8em;margin:0.5em;">
    
      Tagged <a href="/tags/8-ruby">ruby</a>, <a href="/tags/9-rails">rails</a>, <a href="/tags/71-mysql">mysql</a>, <a href="/tags/72-backup">backup</a>, <a href="/tags/73-capistrano">capistrano</a>
    
    
  </div>
</div>






