<?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>LRBlog &#187; Guides</title>
	<atom:link href="http://blog.lrdesign.com/category/guides/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.lrdesign.com</link>
	<description>Logical Reality Design: Web Design and Software Development</description>
	<lastBuildDate>Thu, 08 Jul 2010 01:40:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>HOWTO: Setting up CruiseControl.rb on Slicehost</title>
		<link>http://blog.lrdesign.com/2010/02/howto-setting-up-cruisecontrol-rb-on-slicehost/</link>
		<comments>http://blog.lrdesign.com/2010/02/howto-setting-up-cruisecontrol-rb-on-slicehost/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 00:47:46 +0000</pubDate>
		<dc:creator>Evan</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Guides]]></category>

		<guid isPermaLink="false">http://blog.lrdesign.com/?p=90</guid>
		<description><![CDATA[Continuous Integration is a key tool for collborative development, and CruiseControl.rb is the tool of choice for many Ruby and Rails teams, including us at Logical Reality. Unfortunately, setting up CC.rb for a team can be a relatively frustrating experience: this guide (the first of a series of HOWTOs by LRD) will walk you through [...]]]></description>
			<content:encoded><![CDATA[<p>Continuous Integration is a key tool for collborative development, and CruiseControl.rb is the tool of choice for many Ruby and Rails teams, including us at Logical Reality.</p>
<p>Unfortunately, setting up CC.rb for a team can be a relatively frustrating experience: this guide (the first of a series of HOWTOs by LRD) will walk you through every step of setting up a team instance of CruiseControl.rb on a low-cost server from <a href="http://slicehost.com">Slicehost</a>.</p>
<h2> Step 1: Lease a Ubuntu Slicehost account</h2>
<p>I recommend a 384 slice or a 512 slice, as 256MB or RAM is pretty light for anything involving a Rails application.   Our CI server runs on a 512 slice; if you are running it on a smaller slice please let us know how it performs.</p>
<p>I used Ubuntu 9.10 (Karmic) for this post.</p>
<h2>Step 2: Create a working user</h2>
<p>Slicehost configures slices with an active root account - definitely a Ubuntu no-no - and no user account. Ick!  Let's start by creating a user account with sudo access to do everything from.   Log in as root using the information Slicehost sends you, run this (replace 'usename' with whatever name you like) and fill in the information it asks for:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #666666; font-style: italic;"># adduser username</span></pre></div></div>

<p>Then edit /etc/sudoers and add this line to the bottom of the file:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">username    <span style="color: #007800;">ALL</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span>ALL<span style="color: #7a0874; font-weight: bold;">&#41;</span> ALL</pre></div></div>

<p>Log out, and log back in as the user you've now configured, to make sure it work.</p>
<h2>Step 3: Installing packages and gems</h2>
<p>Reset your timezone:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> dpkg-reconfigure tzdata</pre></div></div>

<p>Install a whole bunch of packages you'll want for running Rails applications and hosting CruiseControl:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">aptitude</span> <span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #c20cb9; font-weight: bold;">locate</span> emacs git-core ruby build-essential \
libopenssl-ruby ruby1.8-dev irb  apache2 apache2-mpm-prefork \
apache2-prefork-dev sqlite3 rubygems mysql-server mysql-client</pre></div></div>

<p>Go grab a cup of coffee while those install.  The mysql install will ask you to set a root password.   Do so, and write it down for later use.  When all the installs are done, come back and install the ruby gems you'll be needing:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> gem <span style="color: #c20cb9; font-weight: bold;">install</span> sqlite3-ruby passenger mysql metric_fu reek roodi</pre></div></div>

<h2>Step 4: Assorted server configuration</h2>
<p>Add this line to the bottom of your ~/.profile to put your gems in your path:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">PATH</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">$PATH</span>:/var/lib/gems/1.8/bin/&quot;</span></pre></div></div>

<p>And source it:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">. ~<span style="color: #000000; font-weight: bold;">/</span>.profile</pre></div></div>

<p>Some assorted config: set up the passenger module for Apache, set your hostname, and make /etc/hosts readable.   (For some bizarre reason, /etc/hosts was only readable by root on my slice, and that has a tendency to break things down the road).</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>gems<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">1.8</span><span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>passenger-install-apache2-module
<span style="color: #c20cb9; font-weight: bold;">sudo</span> emacs <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">hostname</span>  <span style="color: #666666; font-style: italic;"># set it to &quot;your.hostname.com&quot;</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">hostname</span> <span style="color: #660033;">-F</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">hostname</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chmod</span> a+r <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>hosts</pre></div></div>

<h2>Step 5:  Configure Passenger and Apache</h2>
<p>We'll run CruiseControl.rb with Apache and Passenger.   Start by enabling the Passenger module.   The command below will walk you through a super-easy configuration:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>gems<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">1.8</span><span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>passenger-install-apache2-module</pre></div></div>

<p>When the command completes, it will give you three lines to paste into your apache config, they should look pretty much like these below.   Put these lines at the top of /etc/apache2/apache2.conf.  I included the hostname I set in the previous step as ServerName.</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">LoadModule</span> passenger_module /var/lib/gems/<span style="color: #ff0000;">1.8</span>/gems/passenger-2.2.8/ext/apache2/mod_passenger.so
PassengerRoot /var/lib/gems/<span style="color: #ff0000;">1.8</span>/gems/passenger-2.2.8
PassengerRuby /usr/bin/ruby1.8   
&nbsp;
<span style="color: #00007f;">ServerName</span> your.hostname.com</pre></div></div>

<p>To set up the application itself, edit /etc/apache2/sites-available/default to look like this:</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;">&lt;<span style="color: #000000; font-weight:bold;">VirtualHost</span> *:<span style="color: #ff0000;">80</span>&gt;
        <span style="color: #00007f;">ServerAdmin</span> administrator@your-email-domain.com
        <span style="color: #00007f;">DocumentRoot</span> /u/apps/cruisecontrol/public
        RailsEnv production
        RailsBaseURI /
        <span style="color: #00007f;">ServerName</span> &lt;IP Address <span style="color: #00007f;">from</span> Slicehost&gt;
        <span style="color: #00007f;">ServerAlias</span> your.hostname.com
        <span style="color: #00007f;">SetEnv</span> PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/var/lib/gems/<span style="color: #ff0000;">1.8</span>/bin/
&nbsp;
        <span style="color: #00007f;">ErrorLog</span> /var/log/apache2/error.log
&nbsp;
        <span style="color: #adadad; font-style: italic;"># Possible values include: debug, info, notice, warn, error, crit,</span>
        <span style="color: #adadad; font-style: italic;"># alert, emerg.</span>
        <span style="color: #00007f;">LogLevel</span> warn
&nbsp;
        <span style="color: #00007f;">CustomLog</span> /var/log/apache2/access.log combined
&lt;/<span style="color: #000000; font-weight:bold;">VirtualHost</span>&gt;</pre></div></div>

<p>Make a home for the app.  (I use /u/apps/<appname> as a convention for apps in apache. Use whatever you like, but make sure your DocumentRoot in your config file above matches.)</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #660033;">-p</span> <span style="color: #000000; font-weight: bold;">/</span>u<span style="color: #000000; font-weight: bold;">/</span>apps</pre></div></div>

<h2>Step 6: Download and install CruiseControl.rb</h2>
<p>Download cruisecontrol.rb from RubyForge  (Check for the current version first; it was 1.4.0 when I installed), and give ownership to the web user www-data:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>u<span style="color: #000000; font-weight: bold;">/</span>apps
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>rubyforge.org<span style="color: #000000; font-weight: bold;">/</span>frs<span style="color: #000000; font-weight: bold;">/</span>download.php<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">59598</span><span style="color: #000000; font-weight: bold;">/</span>cruisecontrol-1.4.0.tgz
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-zxf</span> cruisecontrol-1.4.0.tgz     
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">mv</span> cruisecontrol-1.4.0 cruisecontrol   
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chown</span> <span style="color: #660033;">-R</span> :www-data cruisecontrol</pre></div></div>

<p>Give environment.rb to the web user; this prevents an  Errno::EACCES accessing environment.rb from Passenger (see discussion at <a href="http://forum.slicehost.com/comments.php?DiscussionID=3668">this forum post</a>).</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chown</span> www-data:www-data config<span style="color: #000000; font-weight: bold;">/</span>environment.rb</pre></div></div>

<p>Turn off the built-in htaccess, it will break Passenger:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">mv</span> public<span style="color: #000000; font-weight: bold;">/</span>.htaccess public<span style="color: #000000; font-weight: bold;">/</span>.htaccess-disabled
<span style="color: #7a0874; font-weight: bold;">cd</span> config  
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">cp</span> site_config.rb_example site_config.rb</pre></div></div>

<h2>Step 7: Setting up the user environment</h2>
<p>CruiseControl.rb prefers, by default, to put project builds in the running user's ~/.cruise directory.   This is unfortunate because the standard user for running Apache, www-data, doesn't have a user directory!  There are ways to override this, but I've found that they cause significant problems down the line.    </p>
<p>An example of the problem is letting CC.rb check out your source code.   If you authenticate access to GitHub or another code repository with SSH, CC.rb &#8212; running as www-data &#8212; won't be able access your repo since www-data doesn't have a ~/.ssh directory to put the keys in!   </p>
<p>After much hacking, I came to the unhappy conclusion that the best solution is simply to let CruiseControl.rb have its way and give user www-data a home directory.  Boo, hiss, but here we go:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>apache2 stop   
<span style="color: #c20cb9; font-weight: bold;">sudo</span> usermod <span style="color: #660033;">-d</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>www-data www-data      
<span style="color: #c20cb9; font-weight: bold;">sudo</span> usermod <span style="color: #660033;">-s</span> <span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">bash</span> www-data
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>apache2 start</pre></div></div>

<p> If you give www-data standard config files as well, then you can set the PATH so that user www-data can find your gems, and you can set up ssh keys so that CruiseControl.rb can securely check out projects from GitHub or whatever source code repository you're using:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #660033;">-r</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>skel <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>www-data 
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chown</span> www-data:www-data <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>www-data
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">su</span> www-data               
<span style="color: #7a0874; font-weight: bold;">cd</span>
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> ~<span style="color: #000000; font-weight: bold;">/</span>.ssh  
<span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>.ssh
<span style="color: #c20cb9; font-weight: bold;">ssh-keygen</span> <span style="color: #660033;">-t</span> rsa
<span style="color: #c20cb9; font-weight: bold;">cat</span> id_rsa.pub</pre></div></div>

<p>Add this line to the bottom of ~/www-data/.profile:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">PATH</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">$PATH</span>:/var/lib/gems/1.8/bin/&quot;</span></pre></div></div>

<p>Re-start Apache:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>apache2 restart</pre></div></div>

<p>At this point, you should be able to load CruiseControl.rb in a web browser at the IP address given to you by Slicehost, or at the domain name if you've set up DNS and it's resolving.  Congratulations, you have CC.rb up and running!  One last thing to configure.</p>
<p>Running CruiseControl.rb will have created a configuration directory . ~www-data/.cruise.   You'll want to edit ~www-data/.cruise/site_config.rb to set two options.  Uncomment and set appropriate values for this line:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"> Configuration.<span style="color:#9900CC;">email_from</span> = <span style="color:#996600;">'cruisecontrolrb@mydomain.com'</span>
 Configuration.<span style="color:#9900CC;">dashboard_url</span> = <span style="color:#996600;">'http://my.cruisecontrolrb.host/'</span></pre></div></div>

<p>Okay, it's time to get a project installed!</p>
<h2>Step 8: Setting up your first project</h2>
<p>I'll use Logical Reality's open-source project, Convection, as an example project for CruiseControl.rb.  This works best if you run it as user 'www-data'.</p>
<p>The command for adding a new project is really simple:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>u<span style="color: #000000; font-weight: bold;">/</span>apps<span style="color: #000000; font-weight: bold;">/</span>cruisecontrol 
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">su</span> www-data
.<span style="color: #000000; font-weight: bold;">/</span>cruise add Convection <span style="color: #660033;">-r</span> git:<span style="color: #000000; font-weight: bold;">//</span>github.com<span style="color: #000000; font-weight: bold;">/</span>LRDesign<span style="color: #000000; font-weight: bold;">/</span>Convection.git <span style="color: #660033;">-s</span> git</pre></div></div>

<p>This will set up the build in ~www-data/.cruise/projects/Convection.</p>
<p>Create a test database for the application.   For Convection, I'm going to use mysql, and prefix my database name with 'ci' for Continuous Integration.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">mysqladmin <span style="color: #660033;">-u</span> root <span style="color: #660033;">-p</span> create ci_convection</pre></div></div>

<p>We don't want to put a functioning database.yml in our GitHub repository, but at the same time we want CruiseControl.rb to be able to build and test the app without help from the user.   For all our Rails projects, we use a custom rake task that generates a database.yml from command-line arguments, then rebuilds the database, run the specs, and generate output with metric_fu.   For an example of how to do this, look at our <a href="http://github.com/LRDesign/Convection/blob/master/lib/tasks/integration.rake">integration.rake</a> and <a href="http://github.com/LRDesign/Convection/blob/edge/config/database.yml.ci.erb">ERB database.yml template</a> from Convection.</p>
<p>To configure CruiseControl.rb  to run Convection this, we need to add that task to the configuration file for this project.  Edit ~www-data/.cruise/projects/Convection/cruise_config.rb so that it looks like this:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">&nbsp;
Project.<span style="color:#9900CC;">configure</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>project<span style="color:#006600; font-weight:bold;">|</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># Send email notifications about broken and fixed builds to email1@your.site, email2@your.site (default: send to nobody)</span>
  project.<span style="color:#9900CC;">email_notifier</span>.<span style="color:#9900CC;">emails</span> = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'sysadmin@lrdesign.com'</span>, <span style="color:#996600;">'judson@lrdesign.com'</span><span style="color:#006600; font-weight:bold;">&#93;</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># Set email 'from' field</span>
  project.<span style="color:#9900CC;">email_notifier</span>.<span style="color:#9900CC;">from</span> = <span style="color:#996600;">'sysadmin@lrdesign.com'</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># Build the project by invoking rake task 'custom'</span>
  <span style="color:#008000; font-style:italic;"># project.rake_task = 'custom'</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># Build the project by invoking shell script &quot;build_my_app.sh&quot;. Keep in mind that when the script is invoked,</span>
  <span style="color:#008000; font-style:italic;"># current working directory is &lt;em&gt;[cruise&amp;nbsp;data]&lt;/em&gt;/projects/your_project/work, so if you do not keep build_my_app.sh</span>
  <span style="color:#008000; font-style:italic;"># in version control, it should be '../build_my_app.sh' instead</span>
  <span style="color:#008000; font-style:italic;"># project.build_command = 'build_my_app.sh'</span>
  project.<span style="color:#9900CC;">build_command</span> = <span style="color:#996600;">'rake ci:run[localhost,root,&lt;YOUR_MYSQL_ROOT_PASSWORD&gt;,ci_convection] --trace RAILS_ENV=test'</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># Ping Subversion for new revisions every 5 minutes (default: 30 seconds)</span>
  <span style="color:#008000; font-style:italic;"># project.scheduler.polling_interval = 5.minutes</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<h2>Step 9: There is no step nine!</h2>
<p>Okay, so it's not the simplest thing in the world to set up.  But if you've done everything above correctly, you should have a running server your team can use for continuous integration.  If you've included metric_fu in your build task, you should get both test output and a wealth of useful code metrics.  </p>
<p>Did this sequence work for you?   Did I omit a step or misspell a command?   Let me know in comments, and I'll update/correct the post.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lrdesign.com/2010/02/howto-setting-up-cruisecontrol-rb-on-slicehost/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
