<?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>SmartLogic Solutions Blog &#187; Passenger</title>
	<atom:link href="http://blog.smartlogicsolutions.com/category/passenger/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.smartlogicsolutions.com</link>
	<description>News and updates from the people at SmartLogic Solutions</description>
	<lastBuildDate>Tue, 30 Nov 2010 21:39:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Setting Up Ubuntu 9.10 for Ruby On Rails Development</title>
		<link>http://blog.smartlogicsolutions.com/2010/02/01/setting-up-ubuntu-9-10-for-ruby-on-rails-development/</link>
		<comments>http://blog.smartlogicsolutions.com/2010/02/01/setting-up-ubuntu-9-10-for-ruby-on-rails-development/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 21:09:31 +0000</pubDate>
		<dc:creator>Adam Bachman</dc:creator>
				<category><![CDATA[Adam Bachman]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Passenger]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby Enterprise Edition]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[environment]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://blog.smartlogicsolutions.com/?p=860</guid>
		<description><![CDATA[This is a document I put together at the beginning of 2010 while building yet another Ubuntu VM, digging through our internal documentation to try and find out what I needed. We've got the answers, and generally Ruby, Rails, and Ubuntu are pretty good about telling you how to install tools if you don't have them yet.

But the answers are spread out and distributed randomly. Plus, I can only see "The program '______' is currently not installed. You can install it by typing: sudo apt-get install ______" so many times before I lose interest and put off the task.

So, to prevent future headaches and help all of us out, I put together a how-to that can take a new Rails system from zero to code in a few minutes (depending on network speed) instead of half a day.]]></description>
			<content:encoded><![CDATA[<p>This is a document I put together at the beginning of 2010 while building yet another Ubuntu VM, digging through our internal documentation to try and find out what I needed. We&#8217;ve got the answers, and generally Ruby, Rails, and Ubuntu are pretty good about telling you how to install tools if you don&#8217;t have them yet.</p>
<p>But the answers are spread out and distributed randomly. Plus, I can only see &#8220;The program &#8216;______&#8217; is currently not installed. You can install it by typing: sudo apt-get install ______&#8221; so many times before I lose interest and put off the task.</p>
<p><span id="more-860"></span></p>
<p>So, to prevent future headaches and help all of us out, I put together a how-to that can take a new Rails system from zero to code in a few minutes (depending on network speed) instead of half a day. With no further ado,</p>
<h2>Setting up an Ubuntu box for Rails Development (including virtual machines)</h2>
<h4>Update everything</h4>
<pre>$ sudo aptitude update &amp;&amp; sudo aptitude dist-upgrade</pre>
<h4>Install necessary packages</h4>
<pre>$ sudo aptitude install build-essential vim \
  vim-runtime git-core subversion libsqlite3-dev</pre>
<p>We have projects in git (the newer ones) and svn, so we have to be able to switch fluidly between the two.</p>
<p>And I&#8217;m not trying to start a flame war, but Vim is the first choice for Rails development. You don&#8217;t have to take my word for it; <a href="http://weblog.jamisbuck.org/2008/10/10/coming-home-to-vim">Jamis Buck</a>, <a href="http://github.com/tpope">Tim Pope</a>, and <a href="http://www.adamlowe.me/2009/12/vim-destroys-all-other-rails-editors.html">Adam Lowe</a> all say the same. I recommend the NERDTree, FuzzyFinderTextMate, BufExplorer, and rails.vim plugins if nothing else.</p>
<h4>Install ruby</h4>
<pre>$ sudo aptitude install ruby1.8 ruby rdoc ruby1.8-dev \
  libpgsql-ruby1.8 libmysql-ruby1.8 irb libopenssl-ruby</pre>
<h4>Get rubygems from source. <a href="http://docs.rubygems.org/">http://docs.rubygems.org/</a></h4>
<pre>$ wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz</pre>
<pre>$ tar xzvf rubygems-1.3.5.tgz</pre>
<pre>$ cd rubygems-1.3.5</pre>
<pre>$ sudo ruby setup.rb</pre>
<pre>$ sudo ln -s /usr/bin/gem1.8 /usr/bin/gem</pre>
<pre>$ sudo gem update --system</pre>
<h4>Update ~/.gemrc (at least the :sources: chunk)</h4>
<pre>---
gem: --no-ri --no-rdoc
:benchmark: false
:verbose: true
:backtrace: false
:update_sources: true
:sources:
- http://gemcutter.org
- http://gems.rubyforge.org/
- http://gems.github.com</pre>
<h4>Install and setup Passenger (optional)</h4>
<pre>$ sudo apt-get install apache2-prefork-dev</pre>
<pre>$ sudo gem install passenger</pre>
<pre>$ sudo passenger-install-apache2-module</pre>
<p>and follow the instructions passenger gives you. Most folks in the office run some form of an Apache-Passenger stack for development purposes. I can explain how that setup works in a future post.</p>
<h4>Install geminstaller</h4>
<pre>$ sudo gem install geminstaller</pre>
<p>Almost all of our legacy projects use <a href="http://geminstaller.rubyforge.org/">geminstaller</a> to manage gem dependencies. In the future, new projects will be moving to <a href="http://github.com/wycats/bundler">Bundler</a>, but legacy projects matter and upgrading subsystems is not always justified.</p>
<p>&#8220;If it ain&#8217;t broke, don&#8217;t fix it&#8221; and the corollary: &#8220;because you probably won&#8217;t be able to bill it to the client&#8221; both apply.</p>
<h4>Install common packages (optional, may be required by projects)</h4>
<pre>$ sudo aptitude install imagemagick</pre>
<pre>$ sudo gem install utility_belt open_gem redgreen</pre>
<p>The first (imagemagick) is used by the Paperclip gem to manage files attached to Rails models. The second are tools that make Rails development more manageable on the command line. I highly recommend them. Besides, I&#8217;ve been sneaking redgreen in as a test dependency on our projects, so if you&#8217;re a developer here you&#8217;ll have to install it anyways.</p>
<h4>Create an ssh key (follow instructions)</h4>
<pre>$ ssh-keygen</pre>
<h3>EXAMPLE PROJECT</h3>
<p>All the stuff above won&#8217;t let you test-code-deploy without hassles, so here&#8217;s a sample run through of what the last mile of project-specific setup looks like.</p>
<h4>Get the project. SVN, Git, whatever. Go to it.</h4>
<pre>$ svn co rails-project</pre>
<pre>$ cd rails-project</pre>
<h4>Run geminstaller</h4>
<pre>$ sudo geminstaller                                 # normal</pre>
<pre>$ sudo geminstaller -c config/test/geminstaller.yml # test env</pre>
<h4>Install necessary aptitude packages</h4>
<pre>$ sudo aptitude install texlive-latex-base</pre>
<p>Don&#8217;t ask.</p>
<h4>Create the test database</h4>
<p>Mysql:</p>
<pre>$ rake RAILS_ENV=test db:create</pre>
<p>Postgres (using your username or DB username in place of &#8220;username&#8221;):</p>
<pre>$ sudo -u postgres psql</pre>
<pre>postgres=# CREATE USER username SUPERUSER;</pre>
<pre>postgres=# CREATE DATABASE username OWNER username;</pre>
<p>If you get an error regarding PGconn.quote_ident (Rails 2.3.x on Ubuntu 8.04) patch <code>activerecord-2.3.4/lib/active_record/connection_adapters/postgresql_adapter.rb</code> and add the following:</p>
<pre>def PGconn.quote_ident(name)
  %("#{name}")
end</pre>
<p>immediately after the &#8220;class PGresult&#8221; definition at the top of the file. Once that&#8217;s all done, the following:</p>
<pre>$ rake RAILS_ENV=test db:create</pre>
<pre>$ rake RAILS_ENV=test db:schema:load</pre>
<pre>$ rake RAILS_ENV=test test</pre>
<p>should work.</p>
<h3>go have fun, write code, blow our minds</h3>
<p>So that&#8217;s how we roll. Awkward requirements will still crop up as we pick up new projects (or very old projects) so you&#8217;ll always need a bit of apt/gem fu to get you through the day. Leave questions here or drop me a line at <a href="mailto:adam@smartlogicsolutions.com">adam@smartlogicsolutions.com</a> or <a href="http://twitter.com/abachman">http://twitter.com/abachman</a>.</p>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://blog.smartlogicsolutions.com/2008/07/07/i-cant-upgrade-rubygems-from-111-to-120-on-ubuntu/" rel="bookmark" class="crp_title">I can&#8217;t upgrade RubyGems from 1.1.1 to 1.2.0 on Ubuntu</a></li><li><a href="http://blog.smartlogicsolutions.com/2009/04/26/integrity-ci-on-passenger-222-with-ruby-enterprise-edition-on-ubuntu-804/" rel="bookmark" class="crp_title">Integrity CI on Passenger 2.2.2 with Ruby Enterprise Edition on Ubuntu 8.04</a></li><li><a href="http://blog.smartlogicsolutions.com/2009/01/14/aptinstaller-032-released/" rel="bookmark" class="crp_title">Aptinstaller 0.3.2 Released</a></li><li><a href="http://blog.smartlogicsolutions.com/2008/08/04/introducing-environmentalize-an-intuitive-environment-focused-config-structure-for-your-rails-applications/" rel="bookmark" class="crp_title">Introducing environmentalist: an intuitive, environment-focused config structure for your rails applications</a></li><li><a href="http://blog.smartlogicsolutions.com/2008/06/06/deploying-rails-apps-with-capistrano-without-root-or-sudo-privileges/" rel="bookmark" class="crp_title">Deploying Rails Apps with Capistrano without root or sudo Privileges</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/contextual-related-posts/">Contextual Related Posts</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.smartlogicsolutions.com/2010/02/01/setting-up-ubuntu-9-10-for-ruby-on-rails-development/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Shell Script to Upgrade Ruby Enterprise Edition while Maintaining Directory Naming Sanity</title>
		<link>http://blog.smartlogicsolutions.com/2009/06/10/shell-script-to-upgrade-ruby-enterprise-edition-while-maintaining-directory-naming-sanity/</link>
		<comments>http://blog.smartlogicsolutions.com/2009/06/10/shell-script-to-upgrade-ruby-enterprise-edition-while-maintaining-directory-naming-sanity/#comments</comments>
		<pubDate>Thu, 11 Jun 2009 01:24:28 +0000</pubDate>
		<dc:creator>John Trupiano</dc:creator>
				<category><![CDATA[Passenger]]></category>
		<category><![CDATA[Ruby Enterprise Edition]]></category>
		<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[dos]]></category>
		<category><![CDATA[ree]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://blog.smartlogicsolutions.com/?p=685</guid>
		<description><![CDATA[As you&#8217;re likely already aware, a denial of service (DoS) vulnerability in Ruby&#8217;s BigDecimal library was uncovered, fixed and reported on June 9, 2009. Patching options include: Replacing your current ruby installation with a patched version Installing a gem to patch the code and then updating your application to load the patch. The latter approach [...]]]></description>
			<content:encoded><![CDATA[<p>As you&#8217;re likely already aware, a denial of service (DoS) vulnerability in Ruby&#8217;s BigDecimal library was <a href="http://blog.phusion.nl/2009/06/10/ruby-enterprise-edition-186-20090610-released-fixes-bigdecimal-dos-vulnerability/">uncovered, fixed and reported on June 9, 2009</a>.  Patching options include:</p>
<ul>
<li>Replacing your current ruby installation with a <a href="http://rubyforge.org/frs/download.php/58677/ruby-enterprise-1.8.6-20090610.tar.gz">patched version</a></li>
<li><a href="http://github.com/NZKoz/bigdecimal-segfault-fix/tree/master">Installing a gem</a> to patch the code and then updating your application to load the patch.</li>
</ul>
<p><span id="more-685"></span></p>
<p>The latter approach only postpones the inevitable, so I opted for the former.  If you&#8217;re using the <a href="http://blog.phusion.nl/2009/06/10/ruby-enterprise-edition-186-20090610-released-fixes-bigdecimal-dos-vulnerability/">debian packages</a>, it&#8217;s a simple call to aptitude update.  However, if you&#8217;ve installed from source, this presents a few challenges.</p>
<p>The upgrade is actually quite straightforward.  According to the <a href="http://www.rubyenterpriseedition.com/documentation.html#_upgrading">REE Documentation</a>, you simply need to run the <a href="http://www.rubyenterpriseedition.com/ruby-enterprise-1.8.6-20090610.tar.gz">new installer</a> over top of your previous installation.  This includes specifying the exact same directory name that you used to install the previous version.</p>
<p>As you may know, REE installs by default into /opt/ruby-enterprise-1.8.6-&lt;year_month_day_release&gt;.  However, after completing this, you&#8217;re left with a directory name that doesn&#8217;t reflect what&#8217;s actually installed in there.  If you&#8217;ve a little neurotic like I am, you&#8217;re going to want to rename that directory.  However, be careful.  Your <a href="http://www.modrails.com/">Passenger</a> configuration is likely pointing to the directory that you want to rename, so you&#8217;ll have to remember to update your apache/nginx configuration to reflect this.</p>
<p>When we install REE we create a symlink at /opt/ruby which points to the version of ruby that we want passenger to run.  This allows us to quickly swap in/out different versions of ruby for testing/upgrading/etc.</p>
<p>Considering we have dozens of client applications running on distinct servers each with their own versions of REE installed, I decided to write a script to minimize the manual effort required to upgrade several production servers.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
<span style="color: #666666; font-style: italic;"># Author: John Trupiano</span>
<span style="color: #666666; font-style: italic;"># Script to upgrade an REE installation on a hot server and maintain sane directory names</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$(whoami)</span>&quot;</span> <span style="color: #000000; font-weight: bold;">!</span>= <span style="color: #ff0000;">&quot;root&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
  <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;You need to be root to run this!&quot;</span>
  <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">2</span>
<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #007800;">RF_RELEASE</span>=<span style="color: #000000;">58677</span>
<span style="color: #007800;">REE_VERSION</span>=<span style="color: #000000;">20090610</span>
<span style="color: #007800;">REE</span>=ruby-enterprise-1.8.6-<span style="color: #007800;">$REE_VERSION</span>
<span style="color: #007800;">URL</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: #007800;">$RF_RELEASE</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$REE</span>.tar.gz
&nbsp;
<span style="color: #666666; font-style: italic;"># Determine what the most recent version of REE is that is installed</span>
<span style="color: #007800;">MOST_RECENT_REE_VERSION</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #000000; font-weight: bold;">/</span>opt <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #660033;">-F</span><span style="color: #ff0000;">&quot;-&quot;</span> <span style="color: #ff0000;">'$4 &gt; max &amp;&amp; $2 == &quot;enterprise&quot; { max=$4; maxline=$0 }; END { print max }'</span><span style="color: #000000; font-weight: bold;">`</span>
<span style="color: #007800;">MOST_RECENT_REE</span>=ruby-enterprise-1.8.6-<span style="color: #007800;">$MOST_RECENT_REE_VERSION</span>
&nbsp;
<span style="color: #007800;">WORKING_DIR</span>=<span style="color: #000000; font-weight: bold;">/</span>root<span style="color: #000000; font-weight: bold;">/</span>src
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Going to update <span style="color: #007800;">$MOST_RECENT_REE</span> to <span style="color: #007800;">$REE</span>&quot;</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Back up previous release&quot;</span>
<span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #660033;">-R</span> <span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$MOST_RECENT_REE</span> <span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$MOST_RECENT_REE</span>.bak
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Download new release&quot;</span>
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #660033;">-p</span> <span style="color: #007800;">$WORKING_DIR</span>
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #007800;">$WORKING_DIR</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #007800;">$URL</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Untar and install over the previous release for 'upgrade' according to REE manual&quot;</span>
<span style="color: #c20cb9; font-weight: bold;">tar</span> xzf <span style="color: #007800;">$REE</span>.tar.gz
.<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$REE</span><span style="color: #000000; font-weight: bold;">/</span>installer <span style="color: #660033;">--auto</span> <span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$MOST_RECENT_REE</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Shuffle folder names to remain sane&quot;</span>
<span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$MOST_RECENT_REE</span> <span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$REE</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$MOST_RECENT_REE</span>.bak <span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$MOST_RECENT_REE</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Actually symlink in the new version of REE&quot;</span>
<span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>ruby <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #c20cb9; font-weight: bold;">ln</span> <span style="color: #660033;">-s</span> <span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$REE</span> <span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>ruby
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Clean up after ourselves&quot;</span>
<span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-f</span> <span style="color: #007800;">$WORKING_DIR</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$REE</span></pre></div></div>

<p>Simply upload this script to your server, su &#8211; up to root and run it.  Then restart apache/nginx so that passenger will pick up the new version of ruby.  All of your gems will be maintained, and your most recent version of REE will remain in tact at /opt/ruby-enterprise-1.8.6-&lt;old_version&gt; in case you need it again.</p>
<p><a href="http://gist.github.com/127636">View the script on github</a></p>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://blog.smartlogicsolutions.com/2009/04/26/integrity-ci-on-passenger-222-with-ruby-enterprise-edition-on-ubuntu-804/" rel="bookmark" class="crp_title">Integrity CI on Passenger 2.2.2 with Ruby Enterprise Edition on Ubuntu 8.04</a></li><li><a href="http://blog.smartlogicsolutions.com/2009/02/13/aasm-interning-empty-string-error/" rel="bookmark" class="crp_title">AASM + interning empty string error</a></li><li><a href="http://blog.smartlogicsolutions.com/2008/07/07/i-cant-upgrade-rubygems-from-111-to-120-on-ubuntu/" rel="bookmark" class="crp_title">I can&#8217;t upgrade RubyGems from 1.1.1 to 1.2.0 on Ubuntu</a></li><li><a href="http://blog.smartlogicsolutions.com/2008/10/15/using-swfobject-to-seamlessly-upgrade-to-flash-player-10/" rel="bookmark" class="crp_title">Using SWFObject to Seamlessly Upgrade to Flash Player 10</a></li><li><a href="http://blog.smartlogicsolutions.com/2008/08/04/introducing-environmentalize-an-intuitive-environment-focused-config-structure-for-your-rails-applications/" rel="bookmark" class="crp_title">Introducing environmentalist: an intuitive, environment-focused config structure for your rails applications</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/contextual-related-posts/">Contextual Related Posts</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.smartlogicsolutions.com/2009/06/10/shell-script-to-upgrade-ruby-enterprise-edition-while-maintaining-directory-naming-sanity/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Integrity CI on Passenger 2.2.2 with Ruby Enterprise Edition on Ubuntu 8.04</title>
		<link>http://blog.smartlogicsolutions.com/2009/04/26/integrity-ci-on-passenger-222-with-ruby-enterprise-edition-on-ubuntu-804/</link>
		<comments>http://blog.smartlogicsolutions.com/2009/04/26/integrity-ci-on-passenger-222-with-ruby-enterprise-edition-on-ubuntu-804/#comments</comments>
		<pubDate>Sun, 26 Apr 2009 17:38:28 +0000</pubDate>
		<dc:creator>John Trupiano</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Integrity]]></category>
		<category><![CDATA[Passenger]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby Enterprise Edition]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[ci]]></category>
		<category><![CDATA[ree]]></category>

		<guid isPermaLink="false">http://blog.smartlogicsolutions.com/?p=592</guid>
		<description><![CDATA[I just spent a few hours trying to get this configuration sorted out, so I thought I&#8217;d share my notes. My goal was to get Integrity running on Passenger with Ruby Enterprise Edition. However, I couldn&#8217;t get the user Integrity/Apache was running as to use the proper PATH. Whenever Integrity would try to build my [...]]]></description>
			<content:encoded><![CDATA[<p>I just spent a few hours trying to get this configuration sorted out, so I thought I&#8217;d share my notes.  My goal was to get <a href="http://integrityapp.com/">Integrity</a> running on <a href="http://modrails.com/">Passenger</a> with <a href="http://rubyenterpriseedition.com/">Ruby Enterprise Edition</a>.  However, I couldn&#8217;t get the user Integrity/Apache was running as to use the proper PATH.</p>
<p>Whenever Integrity would try to build my project, I&#8217;d get an error about rake not being able to be found: <code>sh: rake: not found</code></p>
<p><span id="more-592"></span></p>
<p>This totally threw me.  I had added it to /etc/environment</p>
<pre>
PATH="/opt/ruby/bin:$PATH"
</pre>
<p>and so it was certainly on my PATH:</p>
<pre>
john@john-ci:~$ echo $PATH
/opt/ruby/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
</pre>
<p>I had also added it to /root/.bash_profile so that root would have it picked up:</p>
<pre>
john@john-ci:~$ sudo su -
root@john-ci:~# echo $PATH
/opt/ruby/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
</pre>
<p>So why wasn&#8217;t Apache/Integrity picking it up?  To seek this out, I opened up the Integrity source and edited /opt/ruby/lib/ruby/gems/1.8/gems/integrity-0.1.9.3/lib/integrity/project_builder.rb to output the values of `whoami` and $PATH to help me troubleshoot.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC00FF; font-weight:bold;">IO</span>.<span style="color:#9900CC;">popen</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;(echo `whoami` &amp;&amp; echo $PATH &amp;&amp; cd #{scm.working_directory} &amp;&amp; $
          |output| build.output = output.read }</span></pre></div></div>

<p>Doing this yielded the following output:</p>
<pre>
www-data
/usr/local/bin:/usr/bin:/bin
</pre>
<p>At this point, I wholly expected the PATH to not include /opt/ruby/bin, so this isn&#8217;t a surprise.  But why is this being set?</p>
<h3>The Real Problem</h3>
<p>The real issue here was that I was trying to set the PATH in scripts that only get run when a shell is entered.  Since apache starts up as a system process, it is not started from a shell, and does not have a PATH associated with it.  In fact, if you open up /etc/init.d/apache, you&#8217;ll see on one of the first few lines that the PATH is distinctly set:</p>
<pre>
ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin"
</pre>
<p>This was precisely the PATH I was seeing when I hacked Integrity to output its PATH just prior to failing the Rake command.  Now it&#8217;s fairly obvious that I just need to add in /opt/ruby/bin to the front of that PATH, and Integrity will be able to execute all of my ruby/rubygem executables (most importantly rake).</p>
<h3>Recap of Steps to Install</h3>
<ol>
<li><a href="http://rubyenterpriseedition.com/download.html">Download</a> and install REE</li>
<li>Create a symlink for /opt/ruby so it&#8217;s dead simple to upgrade when a new REE comes out: <code>sudo ln -s /opt/ruby-enterprise-whatever-version-you-installed /opt/ruby</code></li>
<li>edit /etc/environment to add /opt/ruby/bin to your shell PATH : <code>PATH=/opt/ruby/bin:$PATH</code></li>
<li>edit ~/.bash_profile to alias sudo so that sudo can inherit your environment : <code>alias sudo='sudo env PATH=$PATH'</code></li>
<li>Reload your environment to pick up the new PATH: <code>source /etc/environment &#038;&#038; source ~/.bash_profile</code></li>
<li>Install Passenger: <code>sudo gem install passenger &#038;&#038; passenger-install-apache2-module</code></li>
<li>Install Integrity Gem: <code>sudo gem install integrity</code></li>
<li>Install Integrity Home: <code>sudo integrity install --passenger ~www-data/integrity</code></li>
<li>Install do_sqlite3 Gem: <code>sudo gem install do_sqlite3</code></li>
<li>Prepare Integrity Database: <code>cd ~www-data/integrity &#038;&#038; sudo integrity migrate_db config.yml</code></li>
<li>Grant ownership of all integrity files to www-data: <code>sudo chown -R www-data:www-data ~www-data/integrity</code></li>
<li>Create Apache config for Integrity: <code>sudo nano -w /etc/apache2/sites-available/integrity</code>:
<pre>
<VirtualHost *>
  ServerName ci.yourdomain.com
  DocumentRoot /var/www/integrity/public
</VirtualHost>
</pre>
</li>
<li>Enable the site: <code>sudo ln -s /etc/apache2/sites-available/integrity /etc/apache2/sites-enabled/002-integrity</code></li>
<li>Edit /etc/init.d/apache2 and add /opt/ruby/bin to the PATH as described above: <code>ENV="env -i LANG=C PATH=/opt/ruby/bin:/usr/local/bin:/usr/bin:/bin"</code></li>
<li>Restart Apache: <code>sudo /etc/init.d/apache2 restart</code></li>
<li>Navigate to http://ci.yourdomain.com/ and start adding projects.</li>
</ol>
<p>Boy, that was a mouthful.  Please let me know if you&#8217;ve also been successful, and if there are any other steps you take to set up Integrity with REE and Passenger.</p>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://blog.smartlogicsolutions.com/2009/06/10/shell-script-to-upgrade-ruby-enterprise-edition-while-maintaining-directory-naming-sanity/" rel="bookmark" class="crp_title">Shell Script to Upgrade Ruby Enterprise Edition while Maintaining Directory Naming Sanity</a></li><li><a href="http://blog.smartlogicsolutions.com/2010/02/01/setting-up-ubuntu-9-10-for-ruby-on-rails-development/" rel="bookmark" class="crp_title">Setting Up Ubuntu 9.10 for Ruby On Rails Development</a></li><li><a href="http://blog.smartlogicsolutions.com/2008/06/02/better-setup-for-environments-in-rails/" rel="bookmark" class="crp_title">Better setup for environments in Rails</a></li><li><a href="http://blog.smartlogicsolutions.com/2008/07/07/i-cant-upgrade-rubygems-from-111-to-120-on-ubuntu/" rel="bookmark" class="crp_title">I can&#8217;t upgrade RubyGems from 1.1.1 to 1.2.0 on Ubuntu</a></li><li><a href="http://blog.smartlogicsolutions.com/2008/08/04/introducing-environmentalize-an-intuitive-environment-focused-config-structure-for-your-rails-applications/" rel="bookmark" class="crp_title">Introducing environmentalist: an intuitive, environment-focused config structure for your rails applications</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/contextual-related-posts/">Contextual Related Posts</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.smartlogicsolutions.com/2009/04/26/integrity-ci-on-passenger-222-with-ruby-enterprise-edition-on-ubuntu-804/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

