<?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; Configuration</title>
	<atom:link href="http://blog.smartlogicsolutions.com/category/configuration/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>Using Byobu and Landscape to improve remote Ubuntu sessions</title>
		<link>http://blog.smartlogicsolutions.com/2010/01/22/ubuntu-byobu-landscape/</link>
		<comments>http://blog.smartlogicsolutions.com/2010/01/22/ubuntu-byobu-landscape/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 20:44:11 +0000</pubDate>
		<dc:creator>Nick Gauthier</dc:creator>
				<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Nick Gauthier]]></category>
		<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.smartlogicsolutions.com/?p=827</guid>
		<description><![CDATA[SSHing into remote servers can be an awkward experience, but it doesn&#8217;t have to be. You can turn your ssh console into a terminal-style window manager with Byobu, and get more system information via landscape. &#8220;Byobu is a Japanese term for decorative, multi-panel screens that serve as folding room dividers. As an open source project, [...]]]></description>
			<content:encoded><![CDATA[<p>SSHing into remote servers can be an awkward experience, but it doesn&#8217;t have to be. You can turn your ssh console into a terminal-style window manager with Byobu, and get more system information via landscape.<br />
<span id="more-827"></span></p>
<blockquote><p><em>&#8220;Byobu is a Japanese term for decorative, multi-panel screens that serve as folding room dividers. As an open source project, Byobu is an elegant enhancement of the otherwise functional, plain, practical GNU Screen.&#8221;</em></p>
<p><a href="https://wiki.ubuntu.com/MeetingLogs/openweekKarmic/Byobu">https://wiki.ubuntu.com/MeetingLogs/openweekKarmic/Byobu</a></p></blockquote>
<p>SSH into your server and install the two packages:</p>
<blockquote><p><code><strong>sudo apt-get install byobu landscape-common update-motd</strong></code></p></blockquote>
<p>Next, run byobu-config:</p>
<div id="attachment_832" class="wp-caption aligncenter" style="width: 652px"><img class="size-full wp-image-832" title="byobu-config" src="http://blog.smartlogicsolutions.com/wp-content/uploads/2010/01/byobu-config.png" alt="Change Byobu settings with byobu-config" width="642" height="400" /><p class="wp-caption-text">Change byobu settings with byobu-config</p></div>
<p>You can change Byobu&#8217;s colors if you&#8217;d like. I like the &#8220;dark&#8221; theme.</p>
<p>The important setting to change is the last one: &#8220;<strong>Byobu currently does not launch at login</strong>&#8220;. Select that and press return. Now you can go back to the menu and exit byobu-config (tab to the exit choice and hit return).</p>
<p>Now log out and log back in again. You&#8217;ll now access Byobu automatically.</p>
<div id="attachment_841" class="wp-caption aligncenter" style="width: 652px"><img class="size-full wp-image-841" title="byobu-login" src="http://blog.smartlogicsolutions.com/wp-content/uploads/2010/01/byobu-login.png" alt="Byobu as your session manager" width="642" height="400" /><p class="wp-caption-text">Byobu as your session manager</p></div>
<p>The new MOTD (that&#8217;s &#8220;Message of the Day&#8221;, which is the text that is displayed when you login) has system information, thanks to <strong>landscape-common</strong>. This will let you know if your almost out of memory or disk space, or if you&#8217;re under heavy load.</p>
<p>Now let&#8217;s look at the information Byobu provides. The bottom row of Byobu contains, from left to right, your Distribution logo and name, uptime, load, cpu frequencies, ram amount and usage, and the date.</p>
<p>The upper row are your windows. Press <strong>F2</strong> to create a new window. Along the bottom of the screen you&#8217;ll now see two entries in the top row of the footer. Press <strong>F3</strong> to move to the previous window and <strong>F4</strong> to move to the next window.</p>
<p>Press <strong>F8</strong>, then give the window a name, like &#8220;echo&#8221;. I like to name each tab with the task I&#8217;m doing, like &#8220;console&#8221;, &#8220;mysql&#8221;, and &#8220;top&#8221;.</p>
<p>You can press <strong>F7</strong> to enter copy/scrollback mode. Use the arrow and page-up/down keys to move around your session. Press the spacebar to start copying. Now move your cursor somewhere else. Then press space again to copy the selection. Byobu doesn&#8217;t have a paste hotkey, so you have to use the screen hotkey, which is <strong>CTRL-a ]</strong> (thats <strong>CTRL-a</strong>, then let go of control and press <strong>]</strong>).</p>
<p>You can press <strong>F12</strong> to quickly lock your terminal, to grab a quick cup of coffee (or read this blog!).</p>
<p>Let&#8217;s explore how to maintain a session. Issue the following command:</p>
<blockquote><p><code><strong>echo hi</strong></code></p></blockquote>
<p>That will print out &#8220;hi&#8221; on the screen. Now let&#8217;s exit this session. Press the Byobu hotkey <strong>F6</strong> to &#8220;Detach&#8221; from Byobu.</p>
<p>You&#8217;ll notice you&#8217;re still logged in, this is because Byobu is an application that runs on top of your session. So now you have to exit again to get back to your local machine.</p>
<p>Now SSH back into your machine. You&#8217;ll notice that command is still on the screen! &#8220;Detaching&#8221; does not end your session, it just detaches you from it. That means you can log in, run a long running task, and then Detach and come back in the morning when your task is done.</p>
<p>For extended information on Byobu, check out its <a href="http://manpages.ubuntu.com/manpages/karmic/en/man1/byobu.1.html">Ubuntu Man Page</a>.</p>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://blog.smartlogicsolutions.com/2009/06/04/mount-options-to-improve-ext4-file-system-performance/" rel="bookmark" class="crp_title">Mount options to improve ext4 file system performance</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/26/loosely-defined-link_to-may-cause-problems-when-overriding-url_helper/" rel="bookmark" class="crp_title">Loosely defined link_to may cause problems when overriding url_helper</a></li><li><a href="http://blog.smartlogicsolutions.com/2008/11/12/watch-multiple-logs-in-a-single-terminal/" rel="bookmark" class="crp_title">Watch Multiple Logs in a Single Terminal</a></li><li><a href="http://blog.smartlogicsolutions.com/2008/07/11/problems-with-restful_authentication-plugin-and-internet-explorer-cookies/" rel="bookmark" class="crp_title">Problems with restful_authentication Plugin and Internet Explorer Cookies</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/01/22/ubuntu-byobu-landscape/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Using Sanitize Email to Preview HTML Emails Locally</title>
		<link>http://blog.smartlogicsolutions.com/2009/04/30/using-sanitize-email-to-preview-html-emails-locally/</link>
		<comments>http://blog.smartlogicsolutions.com/2009/04/30/using-sanitize-email-to-preview-html-emails-locally/#comments</comments>
		<pubDate>Thu, 30 Apr 2009 13:26:04 +0000</pubDate>
		<dc:creator>Nick Gauthier</dc:creator>
				<category><![CDATA[ActionMailer]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[John Trupiano]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Nick Gauthier]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.smartlogicsolutions.com/?p=605</guid>
		<description><![CDATA[John Trupiano has a great post to get you started with sanitize_email for Ruby on Rails. I wanted to preview my HTML emails without having to fill up my online email inboxes with tons of email (and then I&#8217;d have to make filters too). I also didn&#8217;t want to manage actually sending real email. So, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.smartlogicsolutions.com/wiki/John_Trupiano">John Trupiano</a> has <a href="http://blog.smartlogicsolutions.com/2009/04/25/reintroducing-sanitize_email-work-with-production-email-without-fear/">a great post</a> to get you started with <a href="http://github.com/jtrupiano/sanitize_email/tree/master">sanitize_email</a> for Ruby on Rails.</p>
<p>I wanted to preview my HTML emails without having to fill up my online email inboxes with tons of email (and then I&#8217;d have to make filters too). I also didn&#8217;t want to manage actually sending real email. So, I set up my machine for local delivery. Read on for instructions.<br />
<span id="more-605"></span><br />
I am running Ubuntu 9.04, however these instructions should be fine at least back to 8.04.</p>
<h3>Step 1 &#8211; Install Postfix</h3>
<p><code>sudo aptitude install postfix</code></p>
<p>During the install, choose &#8220;Local Delivery Only&#8221;</p>
<h3>Step 2 &#8211; Configure Evolution for Receiving Locally</h3>
<p>Open up Evolution &#8220;Applications->Internet->Evolution Mail&#8221;</p>
<p>Set up a new account and choose local delivery. When it asks you for a path, put in:</p>
<p><code>/var/mail/&lt;username&gt;</code></p>
<p>Note that this path may not exist if you&#8217;ve never received mail.</p>
<h3>Step 3 &#8211; Configure Sanitize Email</h3>
<p>In your rails test environment.rb put:</p>
<p><code>config.action_mailer.delivery_method = :sendmail</code></p>
<p>Then, in the initializer where you set up sanitize email:</p>
<p><code>ActionMailer::Base.sanitized_recipients = ["<username>@<hostname>"]<br />
ActionMailer::Base.local_environments = %w( test )</code></p>
<p>If you need to know your username or hostname, just open up a terminal. The command &#8220;whoami&#8221; will give you your username, and &#8220;hostname&#8221; will give you the hostname.</p>
<h3>Step 4 &#8211; Run your tests</h3>
<p>Now, run your rails tests. You <em>should</em> have a test for every email you send, and that should trigger them to be sent locally. You may have to tell Evolution to Send/Receive. Keep in mind your tests will probably fail because they will expect email to be in test mode.</p>
<h3>Step 5 &#8211; Set it back</h3>
<p>Remember, when you&#8217;re done previewing your email, reset config.action_mailer.delivery_method!</p>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://blog.smartlogicsolutions.com/2009/04/25/reintroducing-sanitize_email-work-with-production-email-without-fear/" rel="bookmark" class="crp_title">Reintroducing sanitize_email | Work with Production Email without Fear</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/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/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/2008/10/08/benchmark-ruby-code-with-r-rsruby-and-better-benchmark/" rel="bookmark" class="crp_title">Benchmark Ruby Code with R, rsruby and better-benchmark</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/30/using-sanitize-email-to-preview-html-emails-locally/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>environmentalist 0.2.3 released &#8212; supports rails 2.3.2</title>
		<link>http://blog.smartlogicsolutions.com/2009/04/04/environmentalist-023-released-supports-rails-232/</link>
		<comments>http://blog.smartlogicsolutions.com/2009/04/04/environmentalist-023-released-supports-rails-232/#comments</comments>
		<pubDate>Sat, 04 Apr 2009 19:56:44 +0000</pubDate>
		<dc:creator>John Trupiano</dc:creator>
				<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[John Trupiano]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Add new tag]]></category>
		<category><![CDATA[environmentalist]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[rubygem]]></category>

		<guid isPermaLink="false">http://blog.smartlogicsolutions.com/?p=574</guid>
		<description><![CDATA[Just a heads up that I&#8217;ve released environmentalist 0.2.3. You can update with: sudo gem install environmentalist The only substantial change in this release is that we moved the loading of postboot.rb to the bottom of the boot.rb file as opposed to the top of config/environment.rb. This was necessary because common db rake tasks like [...]]]></description>
			<content:encoded><![CDATA[<p>Just a heads up that I&#8217;ve released <a href="http://johntrupiano.rubyforge.org/environmentalist/">environmentalist</a> 0.2.3.  You can update with:</p>
<pre><code>
  sudo gem install environmentalist
</code></pre>
<p>The only substantial change in this release is that we moved the loading of postboot.rb to the bottom of the boot.rb file as opposed to the top of config/environment.rb.  This was necessary because common db rake tasks like db:create and db:drop stopped loading the environment in 2.3.2.</p>
<p>As a recap, environmentalist provides an executable that converts a rails app&#8217;s config structure.  The basic idea is that environments themselves are now first-class citizens, allowing you to create several environments (e.g. staging, prodtest, demo, etc.) in a clean, organized fashion.  Each environment is given its own folder where it can store its own set of configuration files (think mongrel configs, apache configs, etc.) without polluting the top-level config/ directory.</p>
<div id="crp_related"><h3>Related Posts:</h3><ul><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/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/2009/04/25/reintroducing-sanitize_email-work-with-production-email-without-fear/" rel="bookmark" class="crp_title">Reintroducing sanitize_email | Work with Production Email without Fear</a></li><li><a href="http://blog.smartlogicsolutions.com/2008/11/19/timecop-freeze-time-in-ruby-for-better-testing/" rel="bookmark" class="crp_title">Timecop: Freeze Time in Ruby for Better Testing</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/2009/04/04/environmentalist-023-released-supports-rails-232/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing environmentalist: an intuitive, environment-focused config structure for your rails applications</title>
		<link>http://blog.smartlogicsolutions.com/2008/08/04/introducing-environmentalize-an-intuitive-environment-focused-config-structure-for-your-rails-applications/</link>
		<comments>http://blog.smartlogicsolutions.com/2008/08/04/introducing-environmentalize-an-intuitive-environment-focused-config-structure-for-your-rails-applications/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 19:30:07 +0000</pubDate>
		<dc:creator>John Trupiano</dc:creator>
				<category><![CDATA[Configuration]]></category>
		<category><![CDATA[John Trupiano]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[rails config configuration environments environmentalis]]></category>

		<guid isPermaLink="false">http://blog.smartlogicsolutions.com/?p=112</guid>
		<description><![CDATA[A couple of months ago, I wrote an article (Better setup for environments in rails) discussing the standard set of changes we make to the config structure of each of our rails apps. The primary motivation for me to make these changes stemmed from the need to have several deployable environments. The standard set of [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of months ago, I wrote an article (<a href="http://blog.smartlogicsolutions.com/2008/06/02/better-setup-for-environments-in-rails/">Better setup for environments in rails</a>) discussing the standard set of changes we make to the config structure of each of our rails apps.</p>
<p>The primary motivation for me to make these changes stemmed from the need to have several deployable environments.  The standard set of rails environments (development, test, production) simply just don&#8217;t cut it for me.  It&#8217;s important for us to be able to deploy to staging, demo and even production-test environments.  When including server configurations (e.g. a <a href="http://www.modrails.com/">Passenger</a> config snippet, or a <a href="http://mongrel.rubyforge.org/wiki/MongrelCluster">mongrel_cluster</a> config snippet), I&#8217;ve often had to use unique configurations for each deployable environment.  Consequently, my config/ directory quickly became polluted with files such as: apache_prod.conf, apache_staging.conf, apache_demo.conf.  Furthermore, it also requires special care when deployment comes around.</p>
<p><span id="more-112"></span></p>
<p>After manually handling this process for about a dozen apps, I decided to knock out an executable that would take care of this for me.  Alas, <a href="http://github.com/jtrupiano/environmentalist/tree/master">environmentalist</a> was born!</p>
<p>The basic notion behind environmentalist is that application/server configuration should be centered around environments.  Rails has done this to an extent (there is a config/environments directory), but these simply contain a ruby script that ties into the initialization of an application.  There&#8217;s no capacity for defining server/environment configuration outside of the scope of rails.</p>
<p>The gem installs a script that can handle both brand new applications as well as apps that have been in development for any period of time.  The gem itself is only about 100 lines of ruby shell code that shifts your files around.  In psuedo-code, it looks as such:</p>
<ol>
<li> Create directories for each environment, e.g. config/development, config/test, etc.</li>
<li> Copy old environment files (config/environments/development.rb) to new structure (config/development/environment.rb)</li>
<li> Remove the old config/environments directory</li>
<li> Install config/postboot.rb  # this file just overrides the default paths in Rails that are affected by our structural changes</li>
<li> Update config/environment.rb to include config/postboot.rb immediately after config/boot.rb</li>
<li> Break database.yml out into separate files.  config/database.yml becomes config/development/database.yml, config/test/database.yml, etc.</li>
</ol>
<p>The script is intended to handle the case where any or all of these steps have already been completed.  In other words, running the script repeatedly on a particular project should not cause any damage.</p>
<p>Probably the most surprising aspect of this is the fact that I break out a database.yml file for each environment.  I&#8217;ve <a href="http://blog.smartlogicsolutions.com/2008/06/02/better-setup-for-environments-in-rails/#database">made this argument before</a>, and I encourage you to read it.  The gist is this: despite the concern some have in the community about including database credentials in your repository, the fact is if you lock down your box, it doesn&#8217;t really matter (don&#8217;t allow access to your database server outside of a closed network, hello iptables!).  And it&#8217;s certainly very convenient to have credentials for your deployable apps right in your config directory.  This also allows us to separate our local credentials (development, test) &#8212; which have no business going into the repository &#8212; from our remote credentials.  Database.yml problem solved!</p>
<p>For us, this restructuring achieves several other efficiencies.  Two other gems I have (<a href="http://github.com/jtrupiano/capistrano-extensions/tree/master">capistrano-extensions</a> and <a href="http://github.com/jtrupiano/passenger-recipes/tree/master">passenger-recipes</a>) take advantage of this structure to allow me to more easily create extra deployable environments.  <a href="http://www.smartlogicsolutions.com">SmartLogic</a> has reached a point now where it&#8217;s extremely helpful for us to deploy demo versions of almost all of our apps.  With just a little bit of care taken upfront (and a demo server), we can now get this functionality extremely easily across the board.</p>
<h2>This is great, how can I have it?</h2>
<p>Well you can grab the gem off of github.  I don&#8217;t actually have the gem hosted there (I use rake to dynamically build my gemspec, and I haven&#8217;t figured out how to allow github to build my gem without hard-coding version numbers and other values into my .gemspec file&#8230;.any suggestions would be welcome!).  The following steps will install the gem.</p>
<pre>
$> git clone git://github.com/jtrupiano/environmentalist.git
$> cd environmentalist
$> rake gem
$> sudo gem install pkg/environmentalist-0.1.0.gem
</pre>
<h2>How do I use it?</h2>
<p>An executable named &#8220;environmentalize&#8221; is installed when the gem is installed.</p>
<pre>
/path/to/my/rails/project$> environmentalize
</pre>
<p>Or, if you&#8217;re not in the root of your project:</p>
<pre>
~$> environmentalize path/to/rails/root
</pre>
<p>For completeness (and so you don&#8217;t have to download the source), I wanted to include the contents of postboot.rb:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># Be sure to restart your server when you modify this file.</span>
&nbsp;
rails_env = ENV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'RAILS_ENV'</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">||</span> <span style="color:#996600;">'development'</span>
&nbsp;
env_dir  = <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span>RAILS_ROOT, <span style="color:#996600;">'config'</span>, rails_env<span style="color:#006600; font-weight:bold;">&#41;</span>
db_file  = <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span>env_dir, <span style="color:#996600;">'database.yml'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
env_file = <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span>env_dir, <span style="color:#996600;">'environment.rb'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">unless</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">exists</span>?<span style="color:#006600; font-weight:bold;">&#40;</span>env_dir<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;#{env_dir} environment directory cannot be found.&quot;</span>
  <span style="color:#CC0066; font-weight:bold;">exit</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">unless</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">exists</span>?<span style="color:#006600; font-weight:bold;">&#40;</span>db_file<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;#{db_file} is missing.  You cannot continue without this.&quot;</span>
  <span style="color:#CC0066; font-weight:bold;">exit</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#008000; font-style:italic;"># exit with an error code</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">unless</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">exists</span>?<span style="color:#006600; font-weight:bold;">&#40;</span>env_file<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;#{env_file} environment file is missing.&quot;</span> 
  <span style="color:#CC0066; font-weight:bold;">exit</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Now, let's open up Rails and tell it to find our environment files elsewhere.</span>
<span style="color:#9966CC; font-weight:bold;">module</span> Rails
  <span style="color:#9966CC; font-weight:bold;">class</span> Configuration
&nbsp;
    <span style="color:#9966CC; font-weight:bold;">def</span> database_configuration_file
      <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span>root_path, <span style="color:#996600;">'config'</span>, environment, <span style="color:#996600;">'database.yml'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
    <span style="color:#008000; font-style:italic;"># The path to the current environment's file (development.rb, etc.). By</span>
    <span style="color:#008000; font-style:italic;"># default the file is at &lt;tt&gt;config/environments/#{environment}.rb&lt;/tt&gt;.</span>
    <span style="color:#9966CC; font-weight:bold;">def</span> environment_path
      <span style="color:#996600;">&quot;#{root_path}/config/#{environment}/environment.rb&quot;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<div id="crp_related"><h3>Related Posts:</h3><ul><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/2009/04/04/environmentalist-023-released-supports-rails-232/" rel="bookmark" class="crp_title">environmentalist 0.2.3 released &#8212; supports rails 2.3.2</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><a href="http://blog.smartlogicsolutions.com/2009/04/25/reintroducing-sanitize_email-work-with-production-email-without-fear/" rel="bookmark" class="crp_title">Reintroducing sanitize_email | Work with Production Email without Fear</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>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/2008/08/04/introducing-environmentalize-an-intuitive-environment-focused-config-structure-for-your-rails-applications/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

