<?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>Kevin&#039;s random thoughts</title>
	<atom:link href="http://kbullock.ringworld.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://kbullock.ringworld.org</link>
	<description>god, tech, and other geekery</description>
	<lastBuildDate>Thu, 18 Apr 2013 19:53:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>vlad-unicorn version 2.3.1 has been released!</title>
		<link>http://kbullock.ringworld.org/2013/04/18/vlad-unicorn-version-2-3-1-has-been-released/</link>
		<comments>http://kbullock.ringworld.org/2013/04/18/vlad-unicorn-version-2-3-1-has-been-released/#comments</comments>
		<pubDate>Thu, 18 Apr 2013 19:53:04 +0000</pubDate>
		<dc:creator>kbullock</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://kbullock.ringworld.org/?p=1819</guid>
		<description><![CDATA[Unicorn app server support for Vlad. Adds support for vlad:startapp and vlad:stopapp using Unicorn[http://unicorn.bogomips.org/]. Changes: 2.3.1 / 2013-04-18 1 bug fix Generate the command to start Unicorn correctly. http://bitbucket.org/krbullock/vlad-unicorn/]]></description>
			<content:encoded><![CDATA[<p>Unicorn app server support for Vlad. Adds support for vlad:start<em>app and
vlad:stop</em>app using Unicorn[http://unicorn.bogomips.org/].</p>

<p>Changes:</p>

<h3>2.3.1 / 2013-04-18</h3>

<ul>
<li><p>1 bug fix</p>

<ul>
<li>Generate the command to start Unicorn correctly.</li>
</ul></li>
<li><p><a href="http://bitbucket.org/krbullock/vlad-unicorn/">http://bitbucket.org/krbullock/vlad-unicorn/</a></p></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://kbullock.ringworld.org/2013/04/18/vlad-unicorn-version-2-3-1-has-been-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vlad-unicorn version 2.3.0 has been released!</title>
		<link>http://kbullock.ringworld.org/2013/04/17/vlad-unicorn-version-2-3-0-has-been-released/</link>
		<comments>http://kbullock.ringworld.org/2013/04/17/vlad-unicorn-version-2-3-0-has-been-released/#comments</comments>
		<pubDate>Thu, 18 Apr 2013 02:26:25 +0000</pubDate>
		<dc:creator>kbullock</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://kbullock.ringworld.org/?p=1817</guid>
		<description><![CDATA[Unicorn app server support for Vlad. Adds support for vlad:startapp and vlad:stopapp using Unicorn[http://unicorn.bogomips.org/]. Changes: 2.3.0 / 2013-04-17 3 minor enhancements Pass an environment to Unicorn, default to rails_env (if present) or &#8216;production&#8217;. (Mathieu Lemoine) (BC) Create shared/log and shared/pids directories on vlad:setup_app, even for non-Rails apps. Add an option to trivially enable using bundle [...]]]></description>
			<content:encoded><![CDATA[<p>Unicorn app server support for Vlad. Adds support for vlad:start<em>app and
vlad:stop</em>app using Unicorn[http://unicorn.bogomips.org/].</p>

<p>Changes:</p>

<h3>2.3.0 / 2013-04-17</h3>

<ul>
<li><p>3 minor enhancements</p>

<ul>
<li>Pass an environment to Unicorn, default to rails_env (if present) or
&#8216;production&#8217;. (Mathieu Lemoine) (BC)</li>
<li>Create shared/log and shared/pids directories on vlad:setup_app, even for
non-Rails apps.</li>
<li>Add an option to trivially enable using <code>bundle exec</code>.</li>
</ul></li>
<li><p>2 bug fixes</p>

<ul>
<li>Fix broken shell-quoting of sudo commands</li>
<li>Quote config file path when passing it to unicorn</li>
</ul></li>
<li><p><a href="http://bitbucket.org/krbullock/vlad-unicorn/">http://bitbucket.org/krbullock/vlad-unicorn/</a></p></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://kbullock.ringworld.org/2013/04/17/vlad-unicorn-version-2-3-0-has-been-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vlad-unicorn version 2.2.1 has been released!</title>
		<link>http://kbullock.ringworld.org/2013/03/08/vlad-unicorn-version-2-2-1-has-been-released/</link>
		<comments>http://kbullock.ringworld.org/2013/03/08/vlad-unicorn-version-2-2-1-has-been-released/#comments</comments>
		<pubDate>Fri, 08 Mar 2013 18:04:10 +0000</pubDate>
		<dc:creator>kbullock</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://kbullock.ringworld.org/?p=1806</guid>
		<description><![CDATA[Unicorn app server support for Vlad. Adds support for vlad:startapp and vlad:stopapp using Unicorn[http://unicorn.bogomips.org/]. Changes: 2.2.1 / 2013-03-08 1 bug fix Quote commands better when using sudo http://bitbucket.org/krbullock/vlad-unicorn/]]></description>
			<content:encoded><![CDATA[<p>Unicorn app server support for Vlad. Adds support for vlad:start<em>app and
vlad:stop</em>app using Unicorn[http://unicorn.bogomips.org/].</p>

<p>Changes:</p>

<h3>2.2.1 / 2013-03-08</h3>

<ul>
<li><p>1 bug fix</p>

<ul>
<li>Quote commands better when using sudo</li>
</ul></li>
<li><p><a href="http://bitbucket.org/krbullock/vlad-unicorn/">http://bitbucket.org/krbullock/vlad-unicorn/</a></p></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://kbullock.ringworld.org/2013/03/08/vlad-unicorn-version-2-2-1-has-been-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vlad-unicorn version 2.2.0 has been released!</title>
		<link>http://kbullock.ringworld.org/2012/11/09/vlad-unicorn-version-2-2-0-has-been-released/</link>
		<comments>http://kbullock.ringworld.org/2012/11/09/vlad-unicorn-version-2-2-0-has-been-released/#comments</comments>
		<pubDate>Fri, 09 Nov 2012 17:08:42 +0000</pubDate>
		<dc:creator>kbullock</dc:creator>
				<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://kbullock.ringworld.org/?p=1800</guid>
		<description><![CDATA[Unicorn app server support for Vlad. Adds support for vlad:start&#95;app and vlad:stop&#95;app using Unicorn. Changes: 2.2.0 / 2012-11-09 1 minor enhancement Add a new task, vlad:reload&#95;app, to send SIGUSR2 to Unicorn (Mathieu Lemoine). vlad:start&#95;app still uses SIGHUP. http://bitbucket.org/krbullock/vlad-unicorn/]]></description>
			<content:encoded><![CDATA[<p>Unicorn app server support for Vlad. Adds support for vlad:start&#95;app and
vlad:stop&#95;app using <a href="http://unicorn.bogomips.org/">Unicorn</a>.</p>

<p>Changes:</p>

<h3>2.2.0 / 2012-11-09</h3>

<ul>
<li><p>1 minor enhancement</p>

<ul>
<li>Add a new task, vlad:reload&#95;app, to send SIGUSR2 to Unicorn
(Mathieu Lemoine). vlad:start&#95;app still uses SIGHUP.</li>
</ul></li>
<li><p><a href="http://bitbucket.org/krbullock/vlad-unicorn/">http://bitbucket.org/krbullock/vlad-unicorn/</a></p></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://kbullock.ringworld.org/2012/11/09/vlad-unicorn-version-2-2-0-has-been-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vlad-hg version 2.2.4 has been released!</title>
		<link>http://kbullock.ringworld.org/2012/08/19/vlad-hg-version-2-2-4-has-been-released/</link>
		<comments>http://kbullock.ringworld.org/2012/08/19/vlad-hg-version-2-2-4-has-been-released/#comments</comments>
		<pubDate>Sun, 19 Aug 2012 06:29:44 +0000</pubDate>
		<dc:creator>kbullock</dc:creator>
				<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://kbullock.ringworld.org/?p=1798</guid>
		<description><![CDATA[Mercurial support for Vlad. Using it is as simple as passing :scm => :mercurial to Vlad when loading it up. Changes: 2.2.4 / 2012-08-18 2 bug fixes Clone patch queue separately when cloning a repository with a patch queue; hg qclone doesn&#8217;t have a +&#8211;revision+ option. This still gets the default path set correctly (fixed [...]]]></description>
			<content:encoded><![CDATA[<p>Mercurial support for Vlad. Using it is as simple as passing
<tt>:scm => :mercurial</tt> to Vlad when loading it up.</p>

<p>Changes:</p>

<h3>2.2.4 / 2012-08-18</h3>

<ul>
<li><p>2 bug fixes</p>

<ul>
<li><p>Clone patch queue separately when cloning a repository with a patch
queue; <code>hg qclone</code> doesn&#8217;t have a +&#8211;revision+ option.
This still gets the default path set correctly (fixed in 2.2.3).</p></li>
<li><p>Explicitly enable MQ on the command line when using a patch queue.</p></li>
</ul></li>
<li><p><a href="http://hitsquad.rubyforge.org/vlad-hg/">http://hitsquad.rubyforge.org/vlad-hg/</a></p></li>
<li><a href="http://rubyforge.org/projects/hitsquad/">http://rubyforge.org/projects/hitsquad/</a></li>
<li><a href="http://bitbucket.org/krbullock/vlad-hg/">http://bitbucket.org/krbullock/vlad-hg/</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://kbullock.ringworld.org/2012/08/19/vlad-hg-version-2-2-4-has-been-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hosting RubyGems for local use</title>
		<link>http://kbullock.ringworld.org/2012/03/29/hosting-rubygems-for-local-use-geminabox/</link>
		<comments>http://kbullock.ringworld.org/2012/03/29/hosting-rubygems-for-local-use-geminabox/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 19:02:46 +0000</pubDate>
		<dc:creator>kbullock</dc:creator>
				<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://kbullock.ringworld.org/?p=1753</guid>
		<description><![CDATA[Last week at work I set up my own RubyGems repository to host some local builds of upstream gems. Following the recommendation on <a href="http://guides.rubygems.org/run-your-own-gem-server/">guides.rubygems.org</a>, I tried out <a href="https://github.com/cwninja/geminabox">Gem in a Box</a>. It works perfectly as advertised, but the setup is largely left as an exercise for the reader (who is assumed to know their way around a web app deployment process).

I'll run through the process I used both as a step-by-step guide to setting up a reasonably locked-down and authenticated (for upload) gem server, and as an example of how to deploy an arbitrary Ruby web app using a sane, repeatable process.]]></description>
			<content:encoded><![CDATA[<p>Last week at work I set up my own RubyGems repository to host some local builds of upstream gems. Following the recommendation on <a href="http://guides.rubygems.org/run-your-own-gem-server/">guides.rubygems.org</a>, I tried out <a href="https://github.com/cwninja/geminabox">Gem in a Box</a>. It works perfectly as advertised, but the setup is largely left as an exercise for the reader (who is assumed to know their way around a web app deployment process).</p>

<p>I&#8217;ll run through the process I used both as a step-by-step guide to setting up a reasonably locked-down and authenticated (for upload) gem server, and as an example of how to deploy an arbitrary Ruby web app using a sane, repeatable process.</p>

<p><span id="more-1753"></span></p>

<p>Gem in a Box consists of a <a href="http://www.sinatrarb.com/">Sinatra</a> app and a RubyGems <a href="http://guides.rubygems.org/plugins/">plugin</a>, packaged together in a single gem. We could thus just <code>gem install geminabox</code> and go from there, but we want to do this the Right Way(tm). That means:</p>

<ul>
<li>Being able to manage dependencies on deployment easily: <a href="http://gembundler.com/">Bundler</a></li>
<li>Using a deployment tool: <a href="http://rubyhitsquad.com/Vlad_the_Deployer.html">Vlad</a></li>
<li>Keeping our setup in source control: <a href="http://mercurial.selenic.com/">Mercurial</a></li>
</ul>

<p>Substitute Capistrano, Subversion, Git, or other tools as appropriate; the above make up my preferred toolkit. We&#8217;ll also be deploying with <a href="http://unicorn.bogomips.org/">Unicorn</a>, and we&#8217;ll want the appropriate Vlad plugins (namely <a href="http://hitsquad.rubyforge.org/vlad-hg/">vlad-hg</a> and <a href="http://hitsquad.rubyforge.org/vlad-unicorn/">vlad-unicorn</a>) to ease our deployment too.</p>

<h3>1. Create a repository</h3>

<pre><code>$ hg init boxogems
$ cd boxogems
</code></pre>

<h3>2. Create a Gemfile</h3>

<pre><code>source :rubygems

gem 'geminabox'
gem 'unicorn'

group :development do
  gem 'rake'
  gem 'vlad'
  gem 'vlad-hg'
  gem 'vlad-unicorn'
end
</code></pre>

<h3>3. Set up Vlad</h3>

<pre><code># Rakefile
begin
  require 'vlad'
  Vlad.load(:scm =&gt; :mercurial, :type =&gt; nil,
    :app =&gt; :unicorn, :config =&gt; 'vlad.conf.rb')
rescue LoadError
end
</code></pre>

<p>This is just your standard <code>Vlad.load</code> call, but note that we&#8217;re passing <code>:type =&gt; nil</code>. The <code>:type</code> option defaults to <code>:rails</code> &#8212; but we don&#8217;t want to load any of the Rails-specific setup tasks. This way we bypass creating unnecessary symlinks from our release code into the <code>shared/</code> directory.</p>

<p>Also note that I&#8217;m using a non-standard filename for the Vlad config&#8211;if you want to create a <code>config/</code> directory in your project and use the normal <code>config/deploy.rb</code>, that&#8217;s fine. Setting up Gem in a Box requires so little code that I decided to avoid creating unnecessary subdirectories.</p>

<p>Now we create the deployment configuration. We&#8217;ll put the whole gem repository, both the app deployment we&#8217;re creating here and the hosted gems, in a subdirectory of <a href="http://www.pathname.com/fhs/pub/fhs-2.3.html#SRVDATAFORSERVICESPROVIDEDBYSYSTEM"><code>/srv</code></a>, with the app in <code>/srv/rubygems/app</code> and the hosted gems in <code>/srv/rubygems/data</code>.</p>

<pre><code># vlad.conf.rb (or config/deploy.rb)
set :application, 'boxogems'
set :domain, 'backend.example.com'
set :deploy_to, '/srv/rubygems/app'
set :repository, 'ssh://backend.example.com//path/to/boxogems'
set :unicorn_command, "cd #{current_path} &amp;&amp; bundle exec unicorn"
</code></pre>

<h3>4. Create the rackup file</h3>

<p>Now that we&#8217;ve got the deployment harness in place, we can describe our app instance:</p>

<pre><code>require 'geminabox'
Geminabox.data = '/srv/rubygems/data'
map '/gems' do
  run Geminabox
end
</code></pre>

<p>I didn&#8217;t feel the need to create a whole new virtual host when I&#8217;ve already got a perfectly good back-end web server (with an SSL certificate), so I&#8217;m using the <a href="http://rack.rubyforge.org/doc/Rack/Builder.html"><code>Rack::URLMap</code></a> middleware to serve the app on a URI prefix (subdirectory, path prefix, etc.) of &#8216;/gems&#8217;.</p>

<h3>5. Commit and push</h3>

<pre><code>$ hg ci -m 'initial Gem in a Box setup'
$ hg clone . ssh://backend.example.com//path/to/boxogems
</code></pre>

<h3>6. Deploy the app</h3>

<p>Now you should be able to tell Vlad to deploy your app:</p>

<pre><code>$ rake vlad:setup vlad:update
</code></pre>

<p>If all goes well, you can now SSH into your server and&#8230;</p>

<h3>7. Configure the server</h3>

<p>Create the Unicorn configuration file at <code>/srv/rubygems/app/shared/config/unicorn.rb</code>. The specifics are up to you, but here&#8217;s what mine looks like:</p>

<pre><code># shared/config/unicorn.rb
listen '127.0.0.1:4242'
pid '/srv/rubygems/app/shared/pids/unicorn.pid'
stdout_path '/srv/rubygems/app/shared/log/unicorn.stdout.log'
stderr_path '/srv/rubygems/app/shared/log/unicorn.stderr.log'
</code></pre>

<p>If you&#8217;re following the usual practice, you&#8217;ll probably bundle the gems in your deployed app. I don&#8217;t do it that way&#8211;I use Bundler to resolve dependencies, not to duplicate the same gems all over my server&#8217;s hard drive. So after I run <code>rake vlad:update</code>, I always:</p>

<pre><code>server$ cd /srv/rubygems/app/current
server$ sudo bundle install --system --without development
</code></pre>

<p>Now you should be able to start the app using Vlad:</p>

<pre><code>$ rake vlad:start_app
</code></pre>

<p>Check for output from Unicorn in <code>/srv/rubygems/app/shared/log/unicorn.stderr.log</code>. You should see a line that says something like:</p>

<pre><code>I, [2012-03-22T11:32:55.918690 #10411]  INFO -- : worker=0 ready
</code></pre>

<p>That means the app is ready to serve requests; now to make Apache proxy requests to it. This is a bit different from the usual Apache config for a Rails app, so we use a <code>&lt;Location&gt;</code> block inside the virtual host config to do the proxying:</p>

<pre><code># Proxy anything under /gems to Gem in a Box
RewriteEngine On
RewriteRule ^/gems http://127.0.0.1:4242%{REQUEST_URI} [P,QSA,L]

&lt;Location /gems&gt;
  # Limit access to local network
  Order deny,allow
  Deny from all
  Allow from 127.0.0.1 172.16.0.0/20

  # Set up HTTP Basic authentication
  # Substitute your own authentication info here
  AuthName "Box o' Gems"
  AuthType Basic
  AuthUserFile /srv/rubygems/app/shared/config/htpasswd

  # Only allow authenticated users to upload gems
  &lt;LimitExcept GET&gt;
    Require valid-user
  &lt;/LimitExcept&gt;
&lt;/Location&gt;
</code></pre>

<p>Of course, you can force authentication even to download gems just by moving the <code>Require valid-user</code> line outside of the <code>&lt;LimitExcept&gt;</code> block (and removing the empty block). Adjust to your own needs.</p>

<p>At this point you&#8217;re probably thinking, &#8220;Hey, shouldn&#8217;t we be letting Apache serve the static files?&#8221; I&#8217;ll leave that as an exercise for the reader, but I&#8217;ll mention that I tried it, and then went back to letting Gem in a Box handle it directly. To make Apache do it I would&#8217;ve had to teach it about the MIME type of .gem files.</p>

<p>Now restart Apache and you should have a fully-functional RubyGems server!</p>

<h3>Extras</h3>

<p>If you want to be fancy, you can add a little magic into your Rakefile to make <code>rake vlad:setup_app</code> write a default Unicorn config into the right place for you. Put the default config into your source repository as <code>unicorn.example.rb</code>, then add this inside the <code>begin ... rescue LoadError ... end</code> block in your Rakefile:</p>

<pre><code>namespace :vlad do
  task :setup_app do
    commands = ["umask #{umask}"]
    commands &lt;&lt; "mkdir -p #{shared_path}/config"
    commands &lt;&lt; "chown #{perm_owner} #{shared_path}/config" if perm_owner
    commands &lt;&lt; "chgrp #{perm_group} #{shared_path}/config" if perm_group
    run commands.join(' &amp;&amp; ')

    put(unicorn_config) { File.read('unicorn.example.rb') }
    run %(chmod 640 #{unicorn_config})
  end
end
</code></pre>

<p>You can also add a chunk of code that automatically installs the gems like I showed above:</p>

<pre><code>namespace :vlad do
  task :update do
    run %(cd #{current_path} &amp;&amp; sudo bundle install --system --without development)
  end
end
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://kbullock.ringworld.org/2012/03/29/hosting-rubygems-for-local-use-geminabox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vlad-unicorn version 2.1.1 has been released!</title>
		<link>http://kbullock.ringworld.org/2012/02/01/vlad-unicorn-version-2-1-1-has-been-released/</link>
		<comments>http://kbullock.ringworld.org/2012/02/01/vlad-unicorn-version-2-1-1-has-been-released/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 19:35:12 +0000</pubDate>
		<dc:creator>kbullock</dc:creator>
				<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://kbullock.ringworld.org/2012/02/01/vlad-unicorn-version-2-1-1-has-been-released/</guid>
		<description><![CDATA[Unicorn app server support for Vlad. Adds support for vlad:startapp and vlad:stopapp using Unicorn[http://unicorn.bogomips.org/]. Changes: 2.1.1 / 2011-12-28 1 bug fix Allow complex commands in unicorn_command (Matthew Smith) http://bitbucket.org/krbullock/vlad-unicorn/]]></description>
			<content:encoded><![CDATA[<p>Unicorn app server support for Vlad. Adds support for vlad:start<em>app and
vlad:stop</em>app using Unicorn[http://unicorn.bogomips.org/].</p>

<p>Changes:</p>

<h3>2.1.1 / 2011-12-28</h3>

<ul>
<li><p>1 bug fix</p>

<ul>
<li>Allow complex commands in unicorn_command (Matthew Smith)</li>
</ul></li>
<li><p><a href="http://bitbucket.org/krbullock/vlad-unicorn/">http://bitbucket.org/krbullock/vlad-unicorn/</a></p></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://kbullock.ringworld.org/2012/02/01/vlad-unicorn-version-2-1-1-has-been-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vlad-unicorn version 2.1.0 has been released!</title>
		<link>http://kbullock.ringworld.org/2011/09/30/vlad-unicorn-version-2-1-0-has-been-released/</link>
		<comments>http://kbullock.ringworld.org/2011/09/30/vlad-unicorn-version-2-1-0-has-been-released/#comments</comments>
		<pubDate>Fri, 30 Sep 2011 21:49:35 +0000</pubDate>
		<dc:creator>kbullock</dc:creator>
				<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://kbullock.ringworld.org/2011/09/30/vlad-unicorn-version-2-1-0-has-been-released/</guid>
		<description><![CDATA[Unicorn app server support for Vlad. Adds support for vlad:startapp and vlad:stopapp using Unicorn[http://unicorn.bogomips.org/]. Changes: 2.1.0 / 2011-09-30 1 minor enhancement Now uses SIGHUP to restart Added documentation on use with Rails 2.3 apps with Bundler http://bitbucket.org/krbullock/vlad-unicorn/]]></description>
			<content:encoded><![CDATA[<p>Unicorn app server support for Vlad. Adds support for vlad:start<em>app and
vlad:stop</em>app using Unicorn[http://unicorn.bogomips.org/].</p>

<p>Changes:</p>

<h3>2.1.0 / 2011-09-30</h3>

<ul>
<li><p>1 minor enhancement</p>

<ul>
<li>Now uses SIGHUP to restart</li>
</ul></li>
<li><p>Added documentation on use with Rails 2.3 apps with Bundler</p></li>
<li><p><a href="http://bitbucket.org/krbullock/vlad-unicorn/">http://bitbucket.org/krbullock/vlad-unicorn/</a></p></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://kbullock.ringworld.org/2011/09/30/vlad-unicorn-version-2-1-0-has-been-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vlad-hg version 2.2.3 has been released!</title>
		<link>http://kbullock.ringworld.org/2011/09/30/vlad-hg-version-2-2-3-has-been-released/</link>
		<comments>http://kbullock.ringworld.org/2011/09/30/vlad-hg-version-2-2-3-has-been-released/#comments</comments>
		<pubDate>Fri, 30 Sep 2011 15:16:56 +0000</pubDate>
		<dc:creator>kbullock</dc:creator>
				<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://kbullock.ringworld.org/2011/09/30/vlad-hg-version-2-2-3-has-been-released/</guid>
		<description><![CDATA[Mercurial support for Vlad. Using it is as simple as passing :scm => :mercurial to Vlad when loading it up. Changes: 2.2.3 / 2011-09-29 2 bug fixes Use hg qclone when cloning a repository with a patch queue, so that the default path on the deployment patch queue repo is set to the central repository. [...]]]></description>
			<content:encoded><![CDATA[<p>Mercurial support for Vlad. Using it is as simple as passing
<tt>:scm => :mercurial</tt> to Vlad when loading it up.</p>

<p>Changes:</p>

<h3>2.2.3 / 2011-09-29</h3>

<ul>
<li><p>2 bug fixes</p>

<ul>
<li><p>Use <code>hg qclone</code> when cloning a repository with a patch queue,
so that the default path on the deployment patch queue repo is set to the
central repository. This matches the bugfix made in 2.2.0.</p></li>
<li><p>Set a default value for +hg_subrepos+ when using MQ. This prevents the
export step from blowing up with an &#8220;undefined local variable or method&#8221;
error.</p></li>
</ul></li>
<li><p><a href="http://hitsquad.rubyforge.org/vlad-hg/">http://hitsquad.rubyforge.org/vlad-hg/</a></p></li>
<li><a href="http://rubyforge.org/projects/hitsquad/">http://rubyforge.org/projects/hitsquad/</a></li>
<li><a href="http://bitbucket.org/krbullock/vlad-hg/">http://bitbucket.org/krbullock/vlad-hg/</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://kbullock.ringworld.org/2011/09/30/vlad-hg-version-2-2-3-has-been-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vlad-hg version 2.2.2 has been released!</title>
		<link>http://kbullock.ringworld.org/2011/07/18/vlad-hg-version-2-2-2-has-been-released/</link>
		<comments>http://kbullock.ringworld.org/2011/07/18/vlad-hg-version-2-2-2-has-been-released/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 20:10:14 +0000</pubDate>
		<dc:creator>kbullock</dc:creator>
				<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://kbullock.ringworld.org/2011/07/18/vlad-hg-version-2-2-2-has-been-released/</guid>
		<description><![CDATA[Mercurial support for Vlad. Using it is as simple as passing :scm => :mercurial to Vlad when loading it up. Changes: 2.2.2 / 2011-07-18 1 bug fix Respect +deployvia+ and +hgsubrepos+ when using MQ http://hitsquad.rubyforge.org/vlad-hg/ http://rubyforge.org/projects/hitsquad/ http://bitbucket.org/krbullock/vlad-hg/]]></description>
			<content:encoded><![CDATA[<p>Mercurial support for Vlad. Using it is as simple as passing
<tt>:scm => :mercurial</tt> to Vlad when loading it up.</p>

<p>Changes:</p>

<h3>2.2.2 / 2011-07-18</h3>

<ul>
<li><p>1 bug fix</p>

<ul>
<li>Respect +deploy<em>via+ and +hg</em>subrepos+ when using MQ</li>
</ul></li>
<li><p><a href="http://hitsquad.rubyforge.org/vlad-hg/">http://hitsquad.rubyforge.org/vlad-hg/</a></p></li>
<li><a href="http://rubyforge.org/projects/hitsquad/">http://rubyforge.org/projects/hitsquad/</a></li>
<li><a href="http://bitbucket.org/krbullock/vlad-hg/">http://bitbucket.org/krbullock/vlad-hg/</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://kbullock.ringworld.org/2011/07/18/vlad-hg-version-2-2-2-has-been-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->