<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Mike Perham</title>
	
	<link>http://www.mikeperham.com</link>
	<description>On Ruby, software and the Internet</description>
	<pubDate>Thu, 13 Nov 2008 15:45:35 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/mikeperham" type="application/rss+xml" /><item>
		<title>Rails Plugins with Multi-Threading</title>
		<link>http://feeds.feedburner.com/~r/mikeperham/~3/451917432/</link>
		<comments>http://www.mikeperham.com/2008/11/13/rails-plugins-with-multi-threading/#comments</comments>
		<pubDate>Thu, 13 Nov 2008 15:45:35 +0000</pubDate>
		<dc:creator>mperham</dc:creator>
		
		<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://www.mikeperham.com/?p=117</guid>
		<description><![CDATA[I tested tracknowledge with Rails 2.2 yesterday.  The main problem was with plugins: two out of the six I use failed with the same issue when used with threadsafe!
The issue is that ActiveSupport&#8217;s autoloading is turned off once threadsafe! is executed because autoloading is inherently thread-unsafe.  These plugins were not explicitly requiring their [...]]]></description>
			<content:encoded><![CDATA[<p>I tested <a href="http://www.tracknowledge.org">tracknowledge</a> with Rails 2.2 yesterday.  The main problem was with plugins: two out of the six I use failed with the same issue when used with threadsafe!</p>
<p>The issue is that ActiveSupport&#8217;s autoloading is turned off once threadsafe! is executed because autoloading is inherently thread-unsafe.  These plugins were not explicitly requiring their classes in init.rb but instead relying on autoloading like so:</p>
<p><strong>config/environment.rb</strong>:</p>
<pre>
Rails::Initializer.run do |config|
  config.threadsafe!
end
ExceptionNotifier.exception_recipients = %w(mikeATtracknowledge.org)
</pre>
<p>Yes, ExceptionNotifier was one of the broken plugins along with the GeoKit plugin.  The fix is simple:</p>
<pre>
diff --git a/vendor/plugins/exception_notification/init.rb b/vendor/plugins/exception_notification/init.rb
index b39bd95..b1dd2d9 100644
--- a/vendor/plugins/exception_notification/init.rb
+++ b/vendor/plugins/exception_notification/init.rb
@@ -1 +1,4 @@
 require "action_mailer"
+require 'exception_notifier'
+require 'exception_notifiable'
+require 'exception_notifier_helper'
</pre>
<p>If you maintain a Rails plugin, make sure you verify that all classes are loaded in init.rb or you could very well have problems too.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikeperham.com/2008/11/13/rails-plugins-with-multi-threading/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mikeperham.com/2008/11/13/rails-plugins-with-multi-threading/</feedburner:origLink></item>
		<item>
		<title>RubyConf 2008: The Aftermath</title>
		<link>http://feeds.feedburner.com/~r/mikeperham/~3/447450423/</link>
		<comments>http://www.mikeperham.com/2008/11/09/rubyconf-2008-the-aftermath/#comments</comments>
		<pubDate>Sun, 09 Nov 2008 15:04:41 +0000</pubDate>
		<dc:creator>mperham</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.mikeperham.com/?p=115</guid>
		<description><![CDATA[I got back to Austin last night after a great three days in Orlando at RubyConf.  I thought my talk went well and the crowd had several interesting questions so I know someone was paying attention.   
Given that my interests lie in server-side performance and scalability, I saw two linked trends developing:
Threads [...]]]></description>
			<content:encoded><![CDATA[<p>I got back to Austin last night after a great three days in Orlando at RubyConf.  I thought my talk went well and the crowd had several interesting questions so I know someone was paying attention.  <img src='http://www.mikeperham.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Given that my interests lie in server-side performance and scalability, I saw two linked trends developing:</p>
<p><strong>Threads suck (on Ruby?)</strong></p>
<p>They work reasonably well in Java but you should avoid them if humanly possible in Ruby.  They have two fundamental drawbacks: 1) the programming model makes safe concurrency difficult to code and test; and 2) the various Ruby VMs have enough differences in their threading models that you can&#8217;t get good, reliable concurrency even with well-written multi-threaded code.  The current best practice is to move to an evented IO model, which allows a single process to handle many requests concurrently and will peg a single core on a modern processor.  To peg all the cores, you should scale with multiple Ruby processes, a la the traditional pack of Mongrels with Rails.</p>
<p><strong>Real concurrency requires a new language</strong></p>
<p>Even if Ruby had Java&#8217;s excellent VM and threading model, it still is not suited to developing scalable apps on many-core machines because of its more traditional, mutable state nature.  Traditionally pure functional languages excel at concurrency because of their nature: they don&#8217;t allow mutable state or &#8220;side effects&#8221; in the code.  Guess what: these are the two things you need to synchronize when dealing with threads; programming in a good functional language means you don&#8217;t ever need to worry about synchronization.</p>
<p>A note: new languages should not build their own VM anymore.  The Java VM is an incredible feat of engineering and recent languages have starting using it as their platform in order to get a good threading model, excellent garbage collection and a vast array of third-party libraries which can be accessed easily.  Scala and Clojure, for example, are two functional languages which leverage the JVM.  Clojure is my favorite of the two: it&#8217;s more pure, doesn&#8217;t have a compilation step (the compilation is done at runtime) and the syntax is much nicer.</p>
<p>My takeaway was that I need to learn a functional programming language.  FP and compilers were the two weaknesses I had when I graduated Cornell and it looks like being able to switch modes of thought from iterative to functional will be important to top notch engineers in the future.  I&#8217;m going look at Clojure and see what I can do with it.</p>
<p>The ideas in this post came from talks by several people: Jim Weirich, Ilya Grigorik and W. Idris Yasser.  Kudos to them for excellent talks.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikeperham.com/2008/11/09/rubyconf-2008-the-aftermath/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mikeperham.com/2008/11/09/rubyconf-2008-the-aftermath/</feedburner:origLink></item>
		<item>
		<title>Introducing Politics</title>
		<link>http://feeds.feedburner.com/~r/mikeperham/~3/444501478/</link>
		<comments>http://www.mikeperham.com/2008/11/06/introducing-politics/#comments</comments>
		<pubDate>Thu, 06 Nov 2008 16:02:52 +0000</pubDate>
		<dc:creator>mperham</dc:creator>
		
		<category><![CDATA[Personal]]></category>

		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.mikeperham.com/?p=113</guid>
		<description><![CDATA[I&#8217;m going to be introducing my new Politics gem at RubyConf 2008 tomorrow.  This gem provides a few modules which solve a couple of distributed computing problems we were having at FiveRuns in providing fault tolerant, scalable processing across many machines.
Here&#8217;s my RubyConf slides (1MB, Keynote), minus the screencasts I created to demo the [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m going to be introducing my new <a href="http://github.com/mperham/politics">Politics</a> gem at RubyConf 2008 tomorrow.  This gem provides a few modules which solve a couple of distributed computing problems we were having at <a href="http://www.fiveruns.com">FiveRuns</a> in providing fault tolerant, scalable processing across many machines.</p>
<p>Here&#8217;s my <a href='/wp-content/uploads/2008/11/patternsindistributedcomputing.zip'>RubyConf slides</a> (1MB, Keynote), minus the screencasts I created to demo the two worker modules in action.</p>
<p>There are two modules provided:</p>
<ul>
<li><code>TokenWorker</code> ensures that one process from a group of redundant processes will be elected to perform processing for the next N seconds.</li>
<li><code>StaticQueueWorker</code> distributes a predefined set of work to a dynamic set of processes every N seconds.</li>
</ul>
<p>Both depend on the standard Ruby library and <code>memcached</code>.  <code>StaticQueueWorker</code> also depends on <code>net-mdns</code> for Bonjour functionality.</p>
<p>You can find the <a href="http://github.com/mperham/politics">code on github</a> with a more detailed overview and examples of how to use the modules in your own code.  If you find the software useful, please consider recommending me at <a href="http://workingwithrails.com/person/10797-mike-perham">Working On Rails</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikeperham.com/2008/11/06/introducing-politics/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mikeperham.com/2008/11/06/introducing-politics/</feedburner:origLink></item>
		<item>
		<title>EnvyCasts’ new Rails 2.2 screencast review</title>
		<link>http://feeds.feedburner.com/~r/mikeperham/~3/435025357/</link>
		<comments>http://www.mikeperham.com/2008/10/28/envycasts-new-rails-22-screencast-review/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 19:13:43 +0000</pubDate>
		<dc:creator>mperham</dc:creator>
		
		<category><![CDATA[Rails]]></category>

		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.mikeperham.com/?p=111</guid>
		<description><![CDATA[The guys at EnvyCasts gave me the opportunity to take their new screencast for a test drive.  They&#8217;ve produced a 44 minute video and accompanying 118-page PDF covering all the changes in Rails 2.2.  They call it &#8220;The Ultimate Guide to Rails 2.2&#8243; but is it marketing hype, solid as a rock, or [...]]]></description>
			<content:encoded><![CDATA[<p>The guys at <a href="http://envycasts.com/">EnvyCasts</a> gave me the opportunity to take their new screencast for a test drive.  They&#8217;ve produced a 44 minute video and accompanying 118-page PDF covering all the changes in Rails 2.2.  They call it &#8220;The Ultimate Guide to Rails 2.2&#8243; but is it marketing hype, solid as a rock, or somewhere in between?</p>
<p>The coverage of the existing parts of Rails (ActiveRecord, ActiveSupport, etc) is very thorough, especially in the PDF.  Unless you&#8217;re obsessed with Rails, you&#8217;ll learn all sorts of tips to clean up your code and save you time.  In that sense, the package will pay for itself very quickly.  Probably the weakest part of the content is the coverage on I18N.  This is a big subject outside of the US and neither the video or PDF give anything more than a cursory treatment, pointing the viewer to a 3rd party website rather than providing code samples and examples like the other content.</p>
<p>On the production side, the RailsEnvy guys are well known for their rapport and sense of humor and this video is no different, full of banter between the two.  If you like the RailsEnvy podcasts, you can expect the same here.  One small quibble was their use of a background image and on-screen images of Jason and Gregg.  I would have preferred a solid colored background with just a voice-over on the technical content so as to not distract my attention.</p>
<p>So will this package turn you from a Rails 2.2 n00b to a ninja?  Well, I feel like I have a much better understanding of the changes that occurred and already have noted a few places in my own code (I&#8217;m looking at you, <code>link_to</code>) I can clean up once I&#8217;ve migrated to Rails 2.2.  I still can&#8217;t throw a shuriken but I&#8217;m definitely closer to getting a black belt in Rails.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikeperham.com/2008/10/28/envycasts-new-rails-22-screencast-review/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mikeperham.com/2008/10/28/envycasts-new-rails-22-screencast-review/</feedburner:origLink></item>
		<item>
		<title>Laziness Can Hurt</title>
		<link>http://feeds.feedburner.com/~r/mikeperham/~3/431103537/</link>
		<comments>http://www.mikeperham.com/2008/10/24/laziness-can-hurt/#comments</comments>
		<pubDate>Fri, 24 Oct 2008 21:01:15 +0000</pubDate>
		<dc:creator>mperham</dc:creator>
		
		<category><![CDATA[Rails]]></category>

		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.mikeperham.com/?p=110</guid>
		<description><![CDATA[I like Rails&#8217;s config.gem feature: it&#8217;s simple and gives you a lot of functionality for cheap, much like Rails itself.  I just spent half a day tracking down a problem because we were overusing it.
I tend to be fanatical about minimizing dependencies as it has bit me several times in the past.  In this case, [...]]]></description>
			<content:encoded><![CDATA[<p>I like Rails&#8217;s <code>config.gem</code> feature: it&#8217;s simple and gives you a lot of functionality for cheap, much like Rails itself.  I just spent half a day tracking down a problem because we were overusing it.</p>
<p>I tend to be fanatical about minimizing dependencies as it has bit me several times in the past.  In this case, we were using <code>config.gem</code> to load a test dependency, <strong>redgreen</strong>.  All that gem does is colorize your test output.  There&#8217;s no reason to list it as an application dependency but the team wanted all gems to install with <code>rake gems:install</code>.  It didn&#8217;t sit right with me at the time but I didn&#8217;t feel strongly enough to raise the issue.  Well as it turns out when you add <strong>redgreen</strong> via <code>config.gem</code>, it adds a test/unit <code>at_exit</code> handler that exhibits some odd behavior, including breaking the test suite on our sandbox/ci server.</p>
<p>I&#8217;m not blaming <strong>redgreen</strong> and I&#8217;m not blaming <code>config.gem</code> since we really weren&#8217;t using either as designed.  Once it was loaded as normal, everything worked as expected.  Lesson reinforced: <em>keep your app&#8217;s dependencies as simple as possible</em>.  There&#8217;s no reason why <strong>redgreen</strong> should be installed on our production servers.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikeperham.com/2008/10/24/laziness-can-hurt/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mikeperham.com/2008/10/24/laziness-can-hurt/</feedburner:origLink></item>
		<item>
		<title>Fall Speaking Schedule</title>
		<link>http://feeds.feedburner.com/~r/mikeperham/~3/401861976/</link>
		<comments>http://www.mikeperham.com/2008/09/24/fall-speaking-schedule/#comments</comments>
		<pubDate>Wed, 24 Sep 2008 14:48:57 +0000</pubDate>
		<dc:creator>mperham</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.mikeperham.com/?p=109</guid>
		<description><![CDATA[I&#8217;m going to be speaking at a few groups/conferences over the next two months:

San Franscisco Ruby Meetup, Oct 16th
Austin on Rails, Austin TX, Oct 28th
RubyConf 2008, Orlando FL, Nov 6-8th
Raleigh.rb, Raleigh NC, Nov 18th

I&#8217;ll be giving my new &#8220;Patterns in Distributed Computing&#8221; talk, discussing some of the hard problems in the distributed computing space and [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m going to be speaking at a few groups/conferences over the next two months:</p>
<ul>
<li>San Franscisco Ruby Meetup, Oct 16th</li>
<li>Austin on Rails, Austin TX, Oct 28th</li>
<li>RubyConf 2008, Orlando FL, Nov 6-8th</li>
<li>Raleigh.rb, Raleigh NC, Nov 18th</li>
</ul>
<p>I&#8217;ll be giving my new &#8220;Patterns in Distributed Computing&#8221; talk, discussing some of the hard problems in the distributed computing space and my own attempts over the last year to solve some of them.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikeperham.com/2008/09/24/fall-speaking-schedule/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mikeperham.com/2008/09/24/fall-speaking-schedule/</feedburner:origLink></item>
		<item>
		<title>MySQL Optimization</title>
		<link>http://feeds.feedburner.com/~r/mikeperham/~3/396391908/</link>
		<comments>http://www.mikeperham.com/2008/09/18/mysql-optimization/#comments</comments>
		<pubDate>Thu, 18 Sep 2008 17:09:20 +0000</pubDate>
		<dc:creator>mperham</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.mikeperham.com/?p=108</guid>
		<description><![CDATA[This is an amazing set of six pages which cover beginning and intermediate MySQL performance tuning.  If you want to learn about tuning your MySQL database, start here.
InformIT: MySQL Query Optimization

]]></description>
			<content:encoded><![CDATA[<p>This is an amazing set of six pages which cover beginning and intermediate MySQL performance tuning.  If you want to learn about tuning your MySQL database, start here.</p>
<p><a href="http://www.informit.com/articles/article.aspx?p=377652&amp;seqNum=1">InformIT: MySQL Query Optimization<br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikeperham.com/2008/09/18/mysql-optimization/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mikeperham.com/2008/09/18/mysql-optimization/</feedburner:origLink></item>
		<item>
		<title>Bulk Import</title>
		<link>http://feeds.feedburner.com/~r/mikeperham/~3/389862168/</link>
		<comments>http://www.mikeperham.com/2008/09/11/bulk-import/#comments</comments>
		<pubDate>Thu, 11 Sep 2008 17:56:07 +0000</pubDate>
		<dc:creator>mperham</dc:creator>
		
		<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://www.mikeperham.com/?p=107</guid>
		<description><![CDATA[Some quick performance numbers around bulk insert of data into MySQL.  This test inserts 1000 rows into a table.  Rails 2.1.0, ar-extensions 0.8.0 and MySQL 5.0.45 on a MacBook Pro running Leopard.  I tested a number of configurations but the interesting ones are plain old iteration calling save, using ar-extensions&#8217; import method and bare metal [...]]]></description>
			<content:encoded><![CDATA[<p>Some quick performance numbers around bulk insert of data into MySQL.  This test inserts 1000 rows into a table.  Rails 2.1.0, ar-extensions 0.8.0 and MySQL 5.0.45 on a MacBook Pro running Leopard.  I tested a number of configurations but the interesting ones are plain old iteration calling save, using ar-extensions&#8217; import method and bare metal execute.</p>
<ul>
<li>@objects.each { |obj| obj.save! } <strong>3.417227 sec</strong></li>
<li>Metric.import(@objects) <strong>1.374610 sec</strong></li>
<li>Metric.import(@objects, :validate =&gt; false)<strong> 0.488830 sec</strong></li>
<li>Metric.connection.execute(stmt)<strong> 0.033689 sec</strong></li>
</ul>
<p>So the DB driver only takes 3/100s of a second to do the actual insert and return.  Generating a multi-insert statement properly takes almost a half-second.  Proper validation adds almost another second of overhead.  Dumb iteration is slowest of all, due to the repeated round trips to the database.</p>
<p>As a side note, 50% of the overhead in generating the multi-insert statement comes from the DB adapter&#8217;s quote method.  It&#8217;s too bad Rails can&#8217;t enforce a convention of &#8220;all identifiers must be database-safe&#8221; so quoting isn&#8217;t so heavyweight.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikeperham.com/2008/09/11/bulk-import/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mikeperham.com/2008/09/11/bulk-import/</feedburner:origLink></item>
		<item>
		<title>One Year of Ruby</title>
		<link>http://feeds.feedburner.com/~r/mikeperham/~3/388211468/</link>
		<comments>http://www.mikeperham.com/2008/09/09/one-year-of-ruby/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 02:06:58 +0000</pubDate>
		<dc:creator>mperham</dc:creator>
		
		<category><![CDATA[Personal]]></category>

		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.mikeperham.com/?p=106</guid>
		<description><![CDATA[Good News Everybody!  I&#8217;ll be speaking at RubyConf 2008 in Orlando, FL in November on &#8220;Patterns in Distributed Computing&#8221;.  I&#8217;m going to discuss the various algorithms we&#8217;ve used to provide fault tolerance, reliablility and performance from server-side processing daemons.
In other news, this week marks my first anniversery in the professional Ruby world.  I&#8217;m pretty happy [...]]]></description>
			<content:encoded><![CDATA[<p>Good News Everybody!  I&#8217;ll be speaking at RubyConf 2008 in Orlando, FL in November on &#8220;Patterns in Distributed Computing&#8221;.  I&#8217;m going to discuss the various algorithms we&#8217;ve used to provide fault tolerance, reliablility and performance from server-side processing daemons.</p>
<p>In other news, this week marks my first anniversery in the professional Ruby world.  I&#8217;m pretty happy with what I&#8217;ve achieved so far and I hope the next year is just as fun and challenging.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikeperham.com/2008/09/09/one-year-of-ruby/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mikeperham.com/2008/09/09/one-year-of-ruby/</feedburner:origLink></item>
		<item>
		<title>Upgrading tracknowledge.org</title>
		<link>http://feeds.feedburner.com/~r/mikeperham/~3/386051402/</link>
		<comments>http://www.mikeperham.com/2008/09/07/upgrading-tracknowledgeorg/#comments</comments>
		<pubDate>Sun, 07 Sep 2008 20:40:34 +0000</pubDate>
		<dc:creator>mperham</dc:creator>
		
		<category><![CDATA[Personal]]></category>

		<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://www.mikeperham.com/?p=105</guid>
		<description><![CDATA[I&#8217;m upgrading my Rails testbed, http://www.tracknowledge.org, with the latest and greatest.  The Rails world moves VERY quickly and staying on top of it can be challenging.  When I built it initially in April 2008, nginx + mongrel was the typical deployment model.  I stuck with Apache though since it was already installed on the machine; [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m upgrading my Rails testbed, <a href="http://www.tracknowledge.org">http://www.tracknowledge.org</a>, with the latest and greatest.  The Rails world moves VERY quickly and staying on top of it can be challenging.  When I built it initially in April 2008, nginx + mongrel was the typical deployment model.  I stuck with Apache though since it was already installed on the machine; installing and configuring nginx is a known PITA.  Now I&#8217;m going to install Phusion&#8217;s <a href="http://www.modrails.com/">Passenger</a> and <a href="http://www.rubyenterpriseedition.com/">Ruby Enterprise Edition</a>.  Passenger and REE have some big advantages over the typical mongrel model, mostly around memory consumption - always a good thing on a limited VPS slice like I have.  The plan:</p>
<ol>
<li>&#8220;yum update&#8221; to get the latest security and OS updates</li>
<li>Install REE.</li>
<li>Install Passenger.</li>
<li>Configure apache to use REE and Passenger.</li>
<li>Deploy my latest <a href="http://github.com/mperham/tracknowledge">tracknowledge</a> source running on Edge Rails (i.e. 2.2 alpha).</li>
</ol>
<p>You might wonder why I&#8217;m running Edge Rails.  Well, I wanted to get the multithreading and connection pooling features in ASAP so I can test them.  <a href="http://github.com/fiveruns/data_fabric">DataFabric</a> does rely on some of the innards of ActiveRecord&#8217;s ConnectionAdapter class so I&#8217;ll probably need to make changes to get it working on ActiveRecord 2.2.</p>
<p>&lt;an hour passes&gt;</p>
<p>And it&#8217;s done!  Wow, that was pretty easy.  The hardest part by far was simply updating my app to list its gem dependencies and install those gems in the new gem repo for REE.  Kudos to the Phusion guys for making Rails deployment MUCH MUCH simpler!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikeperham.com/2008/09/07/upgrading-tracknowledgeorg/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.mikeperham.com/2008/09/07/upgrading-tracknowledgeorg/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 0.391 seconds --><!-- Cached page served by WP-Cache --><!-- Compression = gzip -->
