<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><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:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Ruby Inside</title>
	
	<link>http://www.rubyinside.com</link>
	<description />
	<lastBuildDate>Wed, 11 Nov 2009 23:49:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/RubyInside" type="application/rss+xml" /><feedburner:emailServiceId>RubyInside</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Torquebox: An All-In-One Java/JBoss Powered Ruby Webapp Platform</title>
		<link>http://feedproxy.google.com/~r/RubyInside/~3/Gn_aeOR0EfM/torquebox-an-all-in-one-javajboss-powered-ruby-webapp-platform-2783.html</link>
		<comments>http://www.rubyinside.com/torquebox-an-all-in-one-javajboss-powered-ruby-webapp-platform-2783.html#comments</comments>
		<pubDate>Wed, 11 Nov 2009 23:43:09 +0000</pubDate>
		<dc:creator>grantmichaels</dc:creator>
				<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.rubyinside.com/?p=2783</guid>
		<description><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/11/torquebox2-150x150.png" alt="torquebox2" title="torquebox2" width="120" height="120" class="alignleft size-thumbnail wp-image-2791" style="margin-right: 12px; margin-bottom: 12px; float: left" />In the past two years we've seen a number of changes in the world of Ruby webapp deployment, but have you heard of <a href="http://torquebox.org/">Torquebox</a>? Built upon the Red Hat Inc. JBoss middleware, Torquebox is an enterprise-grade application server that provides scale-oriented services to your Ruby webapps, including turn-key clustering. With its latest release, Torquebox supports all Rack-based Ruby frameworks.</p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/11/torquebox2-150x150.png" alt="torquebox2" title="torquebox2" width="120" height="120" class="alignleft size-thumbnail wp-image-2791" style="margin-right: 12px; margin-bottom: 12px; float: left" />In the past two years we've seen a number of changes in the world of Ruby webapp deployment, but have you heard of <a href="http://torquebox.org/">Torquebox</a>? Built upon the Red Hat Inc. JBoss middleware, Torquebox is an enterprise-grade application server that provides scale-oriented services to your Ruby webapps, including turn-key clustering. With its latest release, Torquebox supports all Rack-based Ruby frameworks.</p>
<p>Torquebox comes with job scheduling and asynchronous task scheduling <em>out of the box</em> (no extra installs necessary), and while I've grown fond of <a href="http://www.rabbitmq.com/">RabbitMQ,</a> the ease of using the built-in <a href="http://java.sun.com/products/jms/">JMS</a> (Java Message Service) messaging is appealing, particularly if you're likely to deploy within a Java dominant environment. <strong>If you are having trouble convincing management to let you use Ruby, Torquebox is the most enterprise-oriented platform I've seen to date.</strong> Not just that, it's open-source and licensed under the LGPLv3. Their community site boasts that <a href="http://www.jboss.org/">JBoss</a> (upon which Torquebox is built) is <em>"the world's number one Java application server, and it was created by the community."</em></p>
<p>Torquebox 1.0.0.Beta18 was released within a day's time from the latest JRuby 1.4 release and you can download Torquebox from its download page, or build it yourself from <a href="http://github.com/torquebox/torquebox/">source easily obtained from GitHub</a>. If you are using Mac OS X, the following code sample will get you up and running with a simple cut and paste:</p>
<pre>
wget http://repository.torquebox.org/maven2/releases/org/torquebox/torquebox-bin/1.0.0.Beta18/torquebox-bin-1.0.0.Beta18.zip
unzip torquebox-bin-1.0.0.Beta18.zip
mv torquebox-1.0.0.Beta18-bin torquebox
export TORQUEBOX_HOME=~/torquebox
export JBOSS_HOME=$TORQUEBOX_HOME/jboss
export JRUBY_HOME=$TORQUEBOX_HOME/jruby
PATH=$JRUBY_HOME/bin:$PATH
sudo gem install jruby-openssl
sudo gem install activerecord-jdbcsqlite3-adapter
cd ~/torquebox/share/rails
rails -m template.rb ~/torquebox_rails_app
cd ~/torquebox_rails_app
rake rails:freeze:gems
emacs config/database.yml

# (now prefix sqlite3 with jdbc to become "jdbcsqlite3")

jruby -S rake gems:install
jruby -S rake db:migrate
jruby -S rake torquebox:rails:deploy
jruby -S rake torquebox:server:run</pre>
<p>While waiting for JBoss to unfurl, you can close your eyes and do a mental walk-through of installing Erlang, a RabbitMQ daemon, cron, HAProxy, etc. – because you won't have to do that with Torquebox – and when you open your eyes approximately two minutes later, you should be able to see the default Rails page at <code>http://localhost:8080</code>. While everything appears the same as if you were running on it on a Mongrel, you're really experiencing Rails as it's presented from within a JBoss AS appserver, more about that in a minute.</p>
<p>Handily, Torquebox contains tried-and-true JDBC drivers for a number of databases, including Derby, H2, HSQLDB, MySQL, PostgreSQL, and of course, SQLite3. Additionally, Torquebox is Capistrano friendly – so you probably won't need to learn any new tricks to deploy – and it also has built-in support for cryptographic key-storage.</p>
<p>With an application appropriately bundled into a WAR file, you can utilize Torquebox's farming to "deploy your app to one node of the cluster, and to have that node farm it out to all of its peers." Torquebox uses <code>httpd+mod_cluster</code> out in front, so it's "intelligently aware" of your JBoss cluster, and thus, if you have a two-node cluster running, and you start two more JBoss instances on the same subdomain, they'll auto-join the cluster and then the existing nodes will auto-farm the app to them. You're app now has twice the resources and didn't need to be restarted, which in and of itself, is pretty huge.</p>
<p>So, where does Torquebox fit in? One can make the argument that it fits "everywhere." The JVM comes pre-installed on Macs, is easy enough to add to Linux or a Windows desktop, and of course deploys to a number of hosts. Scaling the JVM isn't new, and finding the people to do so is probably easier than finding dedicated Ruby programmers. I would be remiss not to point out that JBoss is hungry for RAM, and I realized quickly that Torquebox wanted more cowbell than my <em>Linode 720</em> could afford. Engine Yard Cloud greatly simplifies deployment to EC2 instances (via Chef), and the smallest instance provides a whopping 1.7GB RAM, so scaling JRuby through the company that houses the JRuby core commiters just makes sense to me. If, however, you feel better qualified to deploy Torquebox yourself, you might look at JBoss Cloud.</p>
<p>I recommend taking 10 minutes to watch the pair (<a href="http://torquebox.org/news/2009/05/screencast-getting-started-with-torquebox">1</a>, <a href="http://torquebox.org/news/2009/05/screencast-scheduled-jobs-with-torquebox">2</a>) of screencasts by Bob McWhirter, which demonstrate all of what I've highlighted here in well under a half an hour.</p>
<p style="background-color:#ffd;padding:8px;font-family:verdana;font-size:12px"><a href="http://devver.net/caliper" rel="nofollow"><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/caliper-logo.png" width="98" height="42" alt="caliper-logo.png" style="float:right; margin-bottom:8px; margin-left:12px;" /></a><em>[ad]</em> Find duplication, code smells, complex code and more in your Ruby code with <a href="http://devver.net/caliper" rel="nofollow">Caliper!</a> The metrics are free and setup takes just one click. <a href="http://devver.net/caliper" rel="nofollow">Get started!</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/RubyInside?a=Gn_aeOR0EfM:FfGsexDXpeM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/RubyInside?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=Gn_aeOR0EfM:FfGsexDXpeM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=Gn_aeOR0EfM:FfGsexDXpeM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=Gn_aeOR0EfM:FfGsexDXpeM:3H-1DwQop_U"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=Gn_aeOR0EfM:FfGsexDXpeM:3H-1DwQop_U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=Gn_aeOR0EfM:FfGsexDXpeM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=Gn_aeOR0EfM:FfGsexDXpeM:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/RubyInside/~4/Gn_aeOR0EfM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.rubyinside.com/torquebox-an-all-in-one-javajboss-powered-ruby-webapp-platform-2783.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.rubyinside.com/torquebox-an-all-in-one-javajboss-powered-ruby-webapp-platform-2783.html</feedburner:origLink></item>
		<item>
		<title>Mail: An All New Ruby E-mail Library</title>
		<link>http://feedproxy.google.com/~r/RubyInside/~3/sEoQMs5rIRY/ruby-email-library-2782.html</link>
		<comments>http://www.rubyinside.com/ruby-email-library-2782.html#comments</comments>
		<pubDate>Wed, 11 Nov 2009 15:02:04 +0000</pubDate>
		<dc:creator>Peter Cooper</dc:creator>
				<category><![CDATA[Cool]]></category>

		<guid isPermaLink="false">http://www.rubyinside.com/ruby-email-library-2782.html</guid>
		<description><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/11/emailIcon.png" width="84" height="88" alt="emailIcon.png" style="float:left; margin-right:12px; margin-bottom:12px;" />To date, the main ways to send e-mails from Ruby have been <a href="http://ruby-doc.org/stdlib/libdoc/net/smtp/rdoc/index.html">Net::SMTP</a>, <a href="http://tmail.rubyforge.org/">TMail</a>, and Rails' <a href="http://api.rubyonrails.org/classes/ActionMailer/Base.html">ActionMailer</a> (which uses TMail). Now, however, there's a fourth option, the simply named "<a href="http://github.com/mikel/mail">mail</a>" by Mikel Lindsaar.</p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/11/emailIcon.png" width="84" height="88" alt="emailIcon.png" style="float:left; margin-right:12px; margin-bottom:12px;" />To date, the main ways to send e-mails from Ruby have been <a href="http://ruby-doc.org/stdlib/libdoc/net/smtp/rdoc/index.html">Net::SMTP</a>, <a href="http://tmail.rubyforge.org/">TMail</a>, and Rails' <a href="http://api.rubyonrails.org/classes/ActionMailer/Base.html">ActionMailer</a> (which uses TMail). Now, however, there's a fourth option, the simply named "<a href="http://github.com/mikel/mail">mail</a>" by Mikel Lindsaar.</p>
<p><a href="http://github.com/mikel/mail">Mail</a> is a new pure Ruby library designed to handle the generation, parsing, and sending of e-mail in a "Rubyesque" manner. Both the sending and receiving e-mails can be handled through the library and, where necessary, Mail proxies methods from libraries like Net::SMTP and Net::POP3. Ruby 1.9 support has been built in from day one so dealing with different text encodings in your e-mails is easier than ever (Mikel claims this is less than straightforward with TMail). Mikel also points out that Mail has 100% spec coverage.</p>
<p>There are lots of code examples on the Mail page but to give you an idea of how it works, here's a code example that sends an e-mail with an attachment:</p>
<pre><span class="constant">Mail</span><span class="punct">.</span><span class="ident">defaults</span> <span class="keyword">do</span>
  <span class="ident">smtp</span> <span class="punct">'</span><span class="string">127.0.0.1</span><span class="punct">'</span> <span class="comment"># Port 25 defult</span>
<span class="keyword">end</span>

<span class="ident">mail</span> <span class="punct">=</span> <span class="constant">Mail</span><span class="punct">.</span><span class="ident">new</span> <span class="keyword">do</span>
      <span class="ident">from</span> <span class="punct">'</span><span class="string">me@test.lindsaar.net</span><span class="punct">'</span>
        <span class="ident">to</span> <span class="punct">'</span><span class="string">you@test.lindsaar.net</span><span class="punct">'</span>
   <span class="ident">subject</span> <span class="punct">'</span><span class="string">Here is the image you wanted</span><span class="punct">'</span>
      <span class="ident">body</span> <span class="constant">File</span><span class="punct">.</span><span class="ident">read</span><span class="punct">('</span><span class="string">body.txt</span><span class="punct">')</span>
  <span class="ident">add_file</span> <span class="punct">{</span><span class="symbol">:filename</span> <span class="punct">=></span> <span class="punct">'</span><span class="string">somefile.png</span><span class="punct">',</span> <span class="symbol">:data</span> <span class="punct">=></span> <span class="constant">File</span><span class="punct">.</span><span class="ident">read</span><span class="punct">('</span><span class="string">/somefile.png</span><span class="punct">')}</span>
<span class="keyword">end</span>

<span class="ident">mail</span><span class="punct">.</span><span class="ident">deliver!</span></pre>
<p>As well as the main GitHub page for the Mail project, there's also <a href="http://groups.google.com/group/mail-ruby">a mail-ruby Google Group</a> where questions can be asked, etc.</p>
<p style="background-color:#ffd;padding:8px;font-family:verdana;font-size:12px"><a href="http://devver.net/caliper" rel="nofollow"><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/caliper-logo.png" width="98" height="42" alt="caliper-logo.png" style="float:right; margin-bottom:8px; margin-left:12px;" /></a><em>[ad]</em> Find duplication, code smells, complex code and more in your Ruby code with <a href="http://devver.net/caliper" rel="nofollow">Caliper!</a> The metrics are free and setup takes just one click. <a href="http://devver.net/caliper" rel="nofollow">Get started!</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/RubyInside?a=sEoQMs5rIRY:Z-c-BZkDB34:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/RubyInside?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=sEoQMs5rIRY:Z-c-BZkDB34:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=sEoQMs5rIRY:Z-c-BZkDB34:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=sEoQMs5rIRY:Z-c-BZkDB34:3H-1DwQop_U"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=sEoQMs5rIRY:Z-c-BZkDB34:3H-1DwQop_U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=sEoQMs5rIRY:Z-c-BZkDB34:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=sEoQMs5rIRY:Z-c-BZkDB34:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/RubyInside/~4/sEoQMs5rIRY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.rubyinside.com/ruby-email-library-2782.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://www.rubyinside.com/ruby-email-library-2782.html</feedburner:origLink></item>
		<item>
		<title>Interesting Ruby Tidbits That Don’t Need Separate Posts #29</title>
		<link>http://feedproxy.google.com/~r/RubyInside/~3/WunoI3kx2B8/ruby-tidbits-29-2780.html</link>
		<comments>http://www.rubyinside.com/ruby-tidbits-29-2780.html#comments</comments>
		<pubDate>Tue, 10 Nov 2009 03:09:03 +0000</pubDate>
		<dc:creator>Peter Cooper</dc:creator>
				<category><![CDATA[Compilation Posts]]></category>
		<category><![CDATA[Elsewhere]]></category>
		<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://www.rubyinside.com/ruby-tidbits-29-2780.html</guid>
		<description><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/11/rubies2-150x150.png" alt="rubies2" title="rubies2" width="120" height="120" class="alignleft size-thumbnail wp-image-2773" style="float: left; margin-right: 12px; margin-bottom: 12px;" />Welcome to the latest installment in the series of compilation posts summarizing some of my latest findings in the world of all things Ruby. Let's tackle those links..</p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/11/rubies2-150x150.png" alt="rubies2" title="rubies2" width="120" height="120" class="alignleft size-thumbnail wp-image-2773" style="float: left; margin-right: 12px; margin-bottom: 12px;" />Welcome to the latest installment in the series of compilation posts summarizing some of my latest findings in the world of all things Ruby. Let's tackle those links..</p>
<h3>Alchemist: Easy Unit Conversion in Ruby</h3>
<p><a href="http://github.com/toastyapps/alchemist">Alchemist</a> is a new Ruby library that aims to take the pain out of performing translation with day to day units, such as miles, kilograms, kelvin, meters, and <a href="http://en.wikipedia.org/wiki/Becquerel">becquerels.</a> There are a few ways you can perform conversions such as explicitly with a method: <code>8.meters.to.miles</code> or inline: <code>10.kilometers + 1.mile</code>. The <a href="http://github.com/toastyapps/alchemist/blob/master/lib/alchemist.rb">library's source code</a> is quite something to look at - there are units I've never even heard of before.</p>
<h3>The Compleat Rubyist - An All-Star Ruby Training Event</h3>
<p>David A Black, of <a href="http://www.amazon.com/Well-Grounded-Rubyist-David-Black/dp/1933988657/?tag=rubyins-20">The Well Grounded Rubyist</a> fame, got in touch recently to promote his forthcoming <a href="http://thecompleatrubyist.com/">The Compleat Rubyist</a> training event. The instructors are David, Gregory Brown (of <a href="http://www.amazon.com/Ruby-Best-Practices-Gregory-Brown/dp/0596523009/?tag=rubyins-20">Ruby Best Practices</a> fame), and Jeremy McAnally (of, well, <a href="http://www.rubyinside.com/rubys-top-hitter-in-2008-jeremy-mcanally-1404.html">lots of fame</a>) and the event takes place on January 22-23, 2010 in Tampa, Florida. I initially wanted to do a series of interviews with the guys to help them spread the word but they'll come later (one word: <em>newborn</em>). Anyway, this is a great chance to learn a thing or two from three Ruby superstars.</p>
<h3>You're An Idiot For Not Using Heroku?</h3>
<p>In the dramatically titled <a href="http://railstips.org/2009/11/8/you-re-an-idiot-for-not-using-heroku">You're An Idiot For Not Using Heroku</a>, John Nunemaker relays how much fun he's been having with Ruby cloud hosting service <a href="http://heroku.com/">Heroku</a> which, you may recall, we <a href="http://www.rubyinside.com/heroku-gets-add-ons-serious-ruby-webapp-hosting-made-easy-2664.html">covered very recently</a> here on Ruby Inside.</p>
<h3>A First Look at Rails 3.0</h3>
<p>Dr Nic Williams has <a href="http://drnicwilliams.com/2009/11/03/first-look-at-rails-3-0-pre">put together a walkthrough of Rails 3.0.pre</a>, the embryonic version of the forthcoming Rails 3.0.</p>
<h3>JRuby 1.4 Released</h3>
<p>The latest significant release of JRuby, 1.4.0, <a href="http://groups.google.com/group/comp.lang.ruby/browse_thread/thread/1b630246f7f5c434">is now available!</a> <em>(linked to a newsgroup announcement as jruby.org is down at the time of writing)</em> The 1.4.0 release brings compatibility with Ruby 1.8.7p174, improved Java integration support, a Windows installer and native launcher, a new embedding framework, RubyGems 1.3.5, and a whole batch of bug fixes.</p>
<h3>Hacking Gems With GitHub and GemCutter</h3>
<p>Dr Nic Williams (who's proving rather popular in this post) asks: <em>"Ever used a rubygem, found a bug, and just wanted to quickly bust out the big guns and fix it quickly?</em> Surely, we all have.. so he's written <a href="http://drnicwilliams.com/2009/11/04/hacking-someones-gem-with-github-and-gemcutter/">Hacking someone's gem with github and gemcutter</a> to show us how to easily fork an existing gem, make our changes, and get it deployed on <a href="http://www.rubyinside.com/gemcutter-is-the-new-official-default-rubygem-host-2659.html">Gemcutter</a> <em>tout de suite.</em></p>
<h3>Building a Twitter Filter with Sinatra, Redis, and TweetStream</h3>
<p>Mirko Froehlich (a.k.a. DigitalHobbit) has written an awesomely in-depth <a href="http://www.digitalhobbit.com/2009/11/08/building-a-twitter-filter-with-sinatra-redis-and-tweetstream/">tutorial on how to build a &quot;Twitter filter&quot;</a> using Sinatra, Haml, jQuery, and some other funky tools. If you want to see the result, check out <a href="http://twatcher.com/">http://twatcher.com/</a></p>
<h3>The Official GitHub Command Line Tool</h3>
<p>I hadn't heard of it before, but Dr Nic Williams announced the release of <a href="http://github.com/defunkt/github-gem">version 0.4.0 of "github-gem",</a> an official GitHub <em>"command line helper for simplifying your GitHub experience."</em> If you're a GitHub user, this looks extremely useful. You can quickly deal with patches made on any forks of your project, fetch downstream changes, and so forth.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/RubyInside?a=WunoI3kx2B8:klUsjO3vPpc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/RubyInside?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=WunoI3kx2B8:klUsjO3vPpc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=WunoI3kx2B8:klUsjO3vPpc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=WunoI3kx2B8:klUsjO3vPpc:3H-1DwQop_U"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=WunoI3kx2B8:klUsjO3vPpc:3H-1DwQop_U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=WunoI3kx2B8:klUsjO3vPpc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=WunoI3kx2B8:klUsjO3vPpc:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/RubyInside/~4/WunoI3kx2B8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.rubyinside.com/ruby-tidbits-29-2780.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.rubyinside.com/ruby-tidbits-29-2780.html</feedburner:origLink></item>
		<item>
		<title>Jekyll: A Ruby-Powered Static Site Generator</title>
		<link>http://feedproxy.google.com/~r/RubyInside/~3/u5ftlrkDeEg/jekyll-a-ruby-powered-static-site-generator-2716.html</link>
		<comments>http://www.rubyinside.com/jekyll-a-ruby-powered-static-site-generator-2716.html#comments</comments>
		<pubDate>Thu, 05 Nov 2009 21:34:22 +0000</pubDate>
		<dc:creator>Ric Roberts</dc:creator>
				<category><![CDATA[Cool]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.rubyinside.com/?p=2716</guid>
		<description><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/11/jekyll.jpg" alt="jekyll" style="float:left; margin-right:12px; margin-bottom:12px" /><a href="http://github.com/mojombo/jekyll">Jekyll</a> is a simple Ruby-powered static site generator, originally by <a href="http://tom.preston-werner.com/">Tom Preston-Werner</a> (aka <em><a href="http://wiki.github.com/mojombo/">mojombo</a></em>) of Github fame.  It's focused around blogging, but it can be configured to generate any kind of static site.  <em>(Note: Jekyll has been around for about a year - <a href="http://tom.preston-werner.com/2008/11/17/blogging-like-a-hacker.html">Tom originally blogged about</a> it in November last year, so apologies if this is old news to some readers, but I've only recently discovered it!)</em></p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/11/jekyll.jpg" alt="jekyll" style="float:left; margin-right:12px; margin-bottom:12px" /><a href="http://github.com/mojombo/jekyll">Jekyll</a> is a simple Ruby-powered static site generator, originally by <a href="http://tom.preston-werner.com/">Tom Preston-Werner</a> (aka <em><a href="http://wiki.github.com/mojombo/">mojombo</a></em>) of Github fame.  It's focused around blogging, but it can be configured to generate any kind of static site.  <em>(Note: Jekyll has been around for about a year - <a href="http://tom.preston-werner.com/2008/11/17/blogging-like-a-hacker.html">Tom originally blogged about</a> it in November last year, so apologies if this is old news to some readers, but I've only recently discovered it!)</em></p>
<p>Because Jekyll outputs a static site structure, it means you can host your blog (or site) from anywhere that you can serve static HTML, simply by using your favourite web server (e.g. Apache).  As Tom describes in his blog post, the idea came from wanting to be able to "Blog like a Hacker".  Jekyll lets you write from the comfort of your favourite text editor, and publish from the command line. Using familiar tools reduces the cognitive load involved with publishing a blog, and lets you focus on what you're writing. It doesn't hurt that even a pretty weak Web server could stand a pounding if it's just serving static files!</p>
<p>By default, Jekyll uses its own (slightly modified) flavour of <a href="http://github.com/tobi/liquid/">Liquid</a> templates, with help from <a href="http://pygments.org/">pygments</a> for syntax highlighting, and you can use textile or markdown for the content.  Each Jekyll blog article template needs a <a href="http://wiki.github.com/mojombo/jekyll/yaml-front-matter">header</a> containing some metadata about that article, such as what layout to use, the article's title, and any custom information you want to provide (such as tags for that article).</p>
<p>Generating your site is easy: just running the <code>jekyll</code> command turns your directory of templates into a complete website, ready to serve.  There's a Jekyll server that you can use for testing (passing <code>--auto</code> as an argument means it will automatically regenerate the site when things are changed).</p>
<pre>
jekyll --server --auto
</pre>
<p><em><a href="http://pages.github.com/">Github Pages</a></em> provides a neat way to publish your Jekyll-generated site.  Every Github page is actually run through Jekyll when you push content to your pages repo (this works because a normal static site is also a valid Jekyll site).</p>
<p>The easiest way to get started with Jekyll is by installing the gem (which is <a href="http://gemcutter.org/gems/jekyll">available on Gemcutter</a>), and checking out the <a href="http://wiki.github.com/mojombo/jekyll">wiki</a> on Github, where there's some great documentation.</p>
<pre>
sudo gem install jekyll
</pre>
<p>As you might expect, <a href="http://tom.preston-werner.com/">Tom Preson-Werner's personal blog</a> runs on Jekyll.  Its source is <a href="http://github.com/mojombo/tpw">publicly available on Github</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/RubyInside?a=u5ftlrkDeEg:ZeXmuOgi24w:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/RubyInside?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=u5ftlrkDeEg:ZeXmuOgi24w:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=u5ftlrkDeEg:ZeXmuOgi24w:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=u5ftlrkDeEg:ZeXmuOgi24w:3H-1DwQop_U"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=u5ftlrkDeEg:ZeXmuOgi24w:3H-1DwQop_U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=u5ftlrkDeEg:ZeXmuOgi24w:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=u5ftlrkDeEg:ZeXmuOgi24w:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/RubyInside/~4/u5ftlrkDeEg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.rubyinside.com/jekyll-a-ruby-powered-static-site-generator-2716.html/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		<feedburner:origLink>http://www.rubyinside.com/jekyll-a-ruby-powered-static-site-generator-2716.html</feedburner:origLink></item>
		<item>
		<title>Thinking Functionally In Ruby – A Great Presentation by Tom Stuart</title>
		<link>http://feedproxy.google.com/~r/RubyInside/~3/Z7Jr7EnuAWs/functional-programming-in-ruby-2713.html</link>
		<comments>http://www.rubyinside.com/functional-programming-in-ruby-2713.html#comments</comments>
		<pubDate>Tue, 03 Nov 2009 14:04:51 +0000</pubDate>
		<dc:creator>Peter Cooper</dc:creator>
				<category><![CDATA[Cool]]></category>
		<category><![CDATA[Elsewhere]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.rubyinside.com/functional-programming-in-ruby-2713.html</guid>
		<description><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/11/thinkfunc.png" width="110" height="107" alt="thinkfunc.png" style="float:left; margin-right:12px; margin-bottom:12px;" /><a href="http://skillsmatter.com/podcast/ajax-ria/enumerators">Thinking Functionally in Ruby</a> is a talk that British Ruby developer Tom Stuart gave at a recent <a href="http://lrug.org/">London Ruby Users Group</a> meeting. In it he covers what functional programming is, why it's a "pretty neat idea," and how to adopt <a href="http://en.wikipedia.org/wiki/Functional_programming">functional programming</a> principles in Ruby. Skills Matter took <a href="http://skillsmatter.com/podcast/ajax-ria/enumerators">a video of the entire 47 minute presentation</a> <i>(it's embedded on the right hand side of that page - Flash required.. just been told it might be limited to UK visitors only, if so <a href="http://experthuman.com/files/thinking-functionally-in-ruby.mp4">get the original MP4 file</a>)</i> but there's also <a href="http://experthuman.com/files/thinking-functionally-in-ruby.pdf">a 110 page PDF</a> <i>(1.5MB download)</i> you should have to hand too (with Tom's slides).</p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/11/thinkfunc.png" width="110" height="107" alt="thinkfunc.png" style="float:left; margin-right:12px; margin-bottom:12px;" /><a href="http://skillsmatter.com/podcast/ajax-ria/enumerators">Thinking Functionally in Ruby</a> is a talk that British Ruby developer Tom Stuart gave at a recent <a href="http://lrug.org/">London Ruby Users Group</a> meeting. In it he covers what functional programming is, why it's a "pretty neat idea," and how to adopt <a href="http://en.wikipedia.org/wiki/Functional_programming">functional programming</a> principles in Ruby. Skills Matter took <a href="http://skillsmatter.com/podcast/ajax-ria/enumerators">a video of the entire 47 minute presentation</a> <i>(it's embedded on the right hand side of that page - Flash required.. just been told it might be limited to UK visitors only, if so <a href="http://experthuman.com/files/thinking-functionally-in-ruby.mp4">get the original MP4 file</a>)</i> but there's also <a href="http://experthuman.com/files/thinking-functionally-in-ruby.pdf">a 110 page PDF</a> <i>(1.5MB download)</i> you should have to hand too (with Tom's slides).</p>
<p><a href="http://skillsmatter.com/podcast/ajax-ria/enumerators"><img src="http://www.rubyinside.com/wp-content/uploads/2009/11/minecode.png" width="640" height="485" alt="minecode.png" /></a></p>
<p>I don't like to link to individual presentations on Ruby Inside too often, but in spite of poor audio quality on the video, Tom's presentation is top notch (the slides are particularly good) and Tom covers some interesting topics that I think Ruby developers could do with revising. If you've wanted to stay on the functional bandwagon but have found yourself slipping into <a href="http://en.wikipedia.org/wiki/Imperative_programming">imperative</a> ways where you shouldn't, this presentation is well worth a watch.</p>
<p style="background-color:#ffd;padding:8px;font-family:verdana;font-size:12px"><a href="http://devver.net/caliper" rel="nofollow"><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/caliper-logo.png" width="98" height="42" alt="caliper-logo.png" style="float:right; margin-bottom:8px; margin-left:12px;" /></a><em>[ad]</em> Find duplication, code smells, complex code and more in your Ruby code with <a href="http://devver.net/caliper" rel="nofollow">Caliper!</a> The metrics are free and setup takes just one click. <a href="http://devver.net/caliper" rel="nofollow">Get started!</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/RubyInside?a=Z7Jr7EnuAWs:mK9FXSO2HAw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/RubyInside?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=Z7Jr7EnuAWs:mK9FXSO2HAw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=Z7Jr7EnuAWs:mK9FXSO2HAw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=Z7Jr7EnuAWs:mK9FXSO2HAw:3H-1DwQop_U"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=Z7Jr7EnuAWs:mK9FXSO2HAw:3H-1DwQop_U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=Z7Jr7EnuAWs:mK9FXSO2HAw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=Z7Jr7EnuAWs:mK9FXSO2HAw:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/RubyInside/~4/Z7Jr7EnuAWs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.rubyinside.com/functional-programming-in-ruby-2713.html/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
<enclosure url="http://experthuman.com/files/thinking-functionally-in-ruby.mp4" length="97618311" type="video/mp4" />
		<feedburner:origLink>http://www.rubyinside.com/functional-programming-in-ruby-2713.html</feedburner:origLink></item>
		<item>
		<title>Riot: for fast, expressive and focused unit tests</title>
		<link>http://feedproxy.google.com/~r/RubyInside/~3/tfL7w9XuFZ0/riot-for-fast-expressive-and-focused-unit-tests-2669.html</link>
		<comments>http://www.rubyinside.com/riot-for-fast-expressive-and-focused-unit-tests-2669.html#comments</comments>
		<pubDate>Sat, 31 Oct 2009 16:57:28 +0000</pubDate>
		<dc:creator>Ric Roberts</dc:creator>
				<category><![CDATA[Cool]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.rubyinside.com/?p=2669</guid>
		<description><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/justin.jpg" alt="Justin" style="float:left; margin-right:12px; margin-bottom:12px;"/><a href="http://github.com/thumblemonks/riot">Riot</a> is a new Ruby test framework by <a href="http://twitter.com/jaknowlden">Justin Knowlden</a> that focuses on <em>faster</em> testing.  Justin was frustrated with his slow running test suites, despite employing techniques such as using factories, mocks and avoiding database access.  He realized that a slow-running suite makes one reluctant to run it or expand it - not good.</p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/justin.jpg" alt="Justin" style="float:left; margin-right:12px; margin-bottom:12px;"/><a href="http://github.com/thumblemonks/riot">Riot</a> is a new Ruby test framework by <a href="http://twitter.com/jaknowlden">Justin Knowlden</a> that focuses on <em>faster</em> testing.  Justin was frustrated with his slow running test suites, despite employing techniques such as using factories, mocks and avoiding database access.  He realized that a slow-running suite makes one reluctant to run it or expand it - not good.</p>
<p>With Riot, each test consists of a block which forms a single assertion on the <code>topic</code> of the test, keeping the tests focused. Tests run in a specific <code>context</code>, and the <code>setup</code> code is only run once per context, further contributing to the speed of your test suite, and unlike some Ruby test frameworks, such as <a href="http://www.thoughtbot.com/projects/shoulda/">Shoulda</a>, that rely on or are based on Test::Unit, Riot has taken a new approach for speed purposes. In Justin's own comparisons, Riot comes out about twice as fast as Test::Unit.  </p>
<p>Here's an example Riot test (from the README):</p>
<pre>
context "a new user" do
  setup { User.new(:email => 'foo@bar.com') }
  asserts("email address") { topic.email }.equals('foo@bar.com')
end
</pre>
<p>Riot's comprehensive <a href="http://github.com/thumblemonks/riot/blob/master/README.markdown">README</a> also includes lots of examples and details on how to modify your Rakefile to run your Riot test suite in different frameworks.  The full documentation is available online <a href="http://rdoc.info/projects/thumblemonks/riot">here</a>.</p>
<p>You can install Riot as a gem from <a href="http://gemcutter.org/">Gemcutter</a>:</p>
<pre>
sudo gem sources -a http://gemcutter.org
sudo gem install riot
</pre>
<p>Justin also has a spin-off project called <a href="http://github.com/thumblemonks/riot_rails">Riot Rails</a>, which includes some Rails-related macros for testing your Ruby On Rails code, and <a href="http://alexyoung.org/">Alex Young</a> has written a <a href="http://github.com/alexyoung/riotjs">Javascript port of Riot</a> which is worth checking out too. He also <a href="http://alexyoung.org/2009/10/26/riot-testing/">has his own look at Riot</a> and demonstrates how Riot can reduce redundancy in tests.</p>
<p style="background-color:#ffd;padding:8px;font-family:verdana;font-size:12px"><a href="http://www.codebasehq.com/?utm_source=rubyinside&amp;utm_medium=footer&amp;utm_campaign=sep09" rel="nofollow"><img src="http://www.rubyinside.com/wp-content/uploads/2009/09/CodebaseLogo-RI.png" width="118" height="37" style="float: right; margin-left: 12px; margin-bottom: 12px" alt="CodebaseLogo-RI.png" /></a><em>[ad]</em> <a href="http://www.codebasehq.com/?utm_source=rubyinside&amp;utm_medium=footer&amp;utm_campaign=sep09" rel="nofollow"><b>Codebase</b></a> is a fast &amp; reliable <b>git, mercurial &amp; subversion hosting</b> service with complete project management built-in - ticketing, milestones, wikis &amp; time tracking - all under one roof. <a href="http://www.codebasehq.com/?utm_source=rubyinside&amp;utm_medium=footer&amp;utm_campaign=sep09" rel="nofollow">Click here to try it - free.</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/RubyInside?a=tfL7w9XuFZ0:sMu09AKRh08:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/RubyInside?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=tfL7w9XuFZ0:sMu09AKRh08:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=tfL7w9XuFZ0:sMu09AKRh08:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=tfL7w9XuFZ0:sMu09AKRh08:3H-1DwQop_U"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=tfL7w9XuFZ0:sMu09AKRh08:3H-1DwQop_U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=tfL7w9XuFZ0:sMu09AKRh08:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=tfL7w9XuFZ0:sMu09AKRh08:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/RubyInside/~4/tfL7w9XuFZ0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.rubyinside.com/riot-for-fast-expressive-and-focused-unit-tests-2669.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://www.rubyinside.com/riot-for-fast-expressive-and-focused-unit-tests-2669.html</feedburner:origLink></item>
		<item>
		<title>Heroku Gets Add-Ons: Serious Ruby Webapp Hosting Made Easy</title>
		<link>http://feedproxy.google.com/~r/RubyInside/~3/1-3-gJPb35c/heroku-gets-add-ons-serious-ruby-webapp-hosting-made-easy-2664.html</link>
		<comments>http://www.rubyinside.com/heroku-gets-add-ons-serious-ruby-webapp-hosting-made-easy-2664.html#comments</comments>
		<pubDate>Wed, 28 Oct 2009 15:33:10 +0000</pubDate>
		<dc:creator>Peter Cooper</dc:creator>
				<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.rubyinside.com/heroku-gets-add-ons-serious-ruby-webapp-hosting-made-easy-2664.html</guid>
		<description><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/heroku.png" width="123" height="59" alt="heroku.png" style="float:left; margin-right:12px; margin-bottom:12px;" /><a href="http://heroku.com/">Heroku</a> is a Ruby webapp hosting service that <a href="http://www.rubyinside.com/heroku-an-online-rails-development-and-app-hosting-environment-647.html">we first mentioned</a> about two years ago. It started off as an online IDE of sorts, but is now a complete cloud platform for running Ruby webapps. You can develop locally and then, with a single command, deploy your app to their metered service. Well, Heroku got in touch with me last week to talk about <a href="http://addons.heroku.com/">their new "Add-Ons" feature</a> and they've really kicked things up a notch for people wanting to quickly roll out webapps online.</p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/heroku.png" width="123" height="59" alt="heroku.png" style="float:left; margin-right:12px; margin-bottom:12px;" /><a href="http://heroku.com/">Heroku</a> is a Ruby webapp hosting service that <a href="http://www.rubyinside.com/heroku-an-online-rails-development-and-app-hosting-environment-647.html">we first mentioned</a> about two years ago. It started off as an online IDE of sorts, but is now a complete cloud platform for running Ruby webapps. You can develop locally and then, with a single command, deploy your app to their metered service. Well, Heroku got in touch with me last week to talk about <a href="http://addons.heroku.com/">their new "Add-Ons" feature</a> and they've really kicked things up a notch for people wanting to quickly roll out webapps online.</p>
<p>Till now, Heroku has provided basic functionality on a semi-metered basis. You pay a monthly fee for a basic rate of service and then pay an hourly rate for more concurrency. Now, you can also add on a bunch of other features which Heroku are calling "Add-ons." Here are just a few of the more interesting ones:</p>
<ul>
<li><a href="http://aws.amazon.com/rds/"><b>Amazon RDS</b></a> <b>(Relational Database Service)</b> - This add-on is free from Heroku's point of view but you'll be paying Amazon.</li>
<li><b>Bundles</b> - A "snapshot" type backup system. You get a single bundle for free or can pay $20 for unlimited bundles.</li>
<li><b>Cron</b> - Daily and hourly crons can be set up with a couple of clicks.</li>
<li><b>Memcached</b> - You can boost your app's performance with in-memory caching provided by Memcached. The key here is that Heroku totally manages the Memcached instance - no server setup needed, etc. Currently this feature is only in private beta though..</li>
<li><b>New Relic</b> - Most readers should be familiar with <a href="http://www.newrelic.com/">New Relic</a>'s application performance tools by now and Heroku makes it easy to get them running directly on your Heroku-hosted apps. (As an aside, New Relic rolled out <a href="http://blog.newrelic.com/2009/10/19/announcing-new-relic-rpm-version-2-with-enhanced-ui-support-for-java-hourly-billing-option-and-more/">a significant update</a> last week - version 2 of their flagship RPM system.)</li>
<li><b>SSL</b> - Get https:// URLs on your Heroku app with a choice between piggyback SSL (free), SNI SSL ($5 per month) or full-blown custom SSL ($100 per month).</li>
<li><b>Websolr</b> - A no-setup-needed Solr instance so you can get quick and easy full text indexing and search functionality in your apps.</li>
</ul>
<p><i>Note: You can learn more about all the different Add-ons at Heroku's dedicated</i> <a href="http://addons.heroku.com/"><i>Add-ons page</i></a><i>.</i></p>
<h3>Impressive but Expensive?</h3>
<p>As impressive as Heroku's one-command-deploy and add-ons features are, though, I can't quite put my finger on Heroku's market - they're kinda pricey. Perhaps it'd be good for professional developers who want to do a test deployment of an app on a live server without getting mired in server configuration?</p>
<p>For full time use, Heroku doesn't strike me as very competitive. For example, for the "Crane" 500MB storage option (billed as <i>"perfect for a small biz app"</i>) with the recommended 4 "Dynos" the fee comes to an estimated $158 per month, and that's without any add-ons. For the entry level "dedicated" option with the recommended 8 dynos, the cost goes to $452.</p>
<p>Despite the cost, though, what Heroku offers is a very simple "no hassles" hosting service that, crucially, can handle significant workloads. You could rig up something similar with VPSes, dedicated boxes elsewhere, or even Amazon EC2, but you're going to be spending time doing server configuration. If playing sysadmin isn't tricky for you (I enjoy it, personally), Heroku might not be for you and you should be looking at companies like <a href="http://www.webbynode.com/">Webbynode</a> or <a href="http://www.linode.com/">Linode.</a> But if you're just a 100% developer who wants to get something up and running and doesn't want to worry about scalability too much, Heroku could be worth the extra expense.</p>
<p><strong>Update: Oren Teich of Heroku got in touch with some notes regarding Heroku's value proposition versus the comparisons I made above. I quote verbatim:</strong></p>
<p>
<blockquote> I wanted to point out that we have many users running huge sites on the free version, serving up hundreds of thousands of hits per month, and that they pricing is deceptive - for that $150 you get an AMAZINGLY high powered service, capable of serving >10 millions requests per day.</p>
<p>We don't do a great job right now of making it clear just how powerful a single dyno is, or what you get with the platform.  We're working on improving the pricing to be clearer.  In the meantime, getting the right message out on this is really important to us.</p>
<p>Also keep in mind, that the DB pricing is for DB usage only - it doesn't include your code, files on disk, etc.  That said, we know we need to right size the DB pricing, but it's amazing how far 500, or even 50 MB of pure DB usage will take you.</p>
<p>Heroku has many users running huge sites on the free version, serving up hundreds of thousands of hits per month.  The pricing can be deceptive, for that $150 you get an AMAZINGLY high powered service, capable of serving >10 millions requests per day.</p></blockquote>
<p>He also noted that there's no charge for bandwidth, although there are some soft limits that haven't been hit by any users yet.</p>
<p><em>Disclaimer: Webbynode and Linode are currently Ruby Inside sponsors. Heroku, however, has no financial connection with Ruby Inside and vice versa.</em></p>
<p style="background-color:#ffd;padding:8px;font-family:verdana;font-size:12px"><a href="http://devver.net/caliper" rel="nofollow"><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/caliper-logo.png" width="98" height="42" alt="caliper-logo.png" style="float:right; margin-bottom:8px; margin-left:12px;" /></a><em>[ad]</em> Find duplication, code smells, complex code and more in your Ruby code with <a href="http://devver.net/caliper" rel="nofollow">Caliper!</a> The metrics are free and setup takes just one click. <a href="http://devver.net/caliper" rel="nofollow">Get started!</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/RubyInside?a=1-3-gJPb35c:q1C9Q9xW9uA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/RubyInside?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=1-3-gJPb35c:q1C9Q9xW9uA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=1-3-gJPb35c:q1C9Q9xW9uA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=1-3-gJPb35c:q1C9Q9xW9uA:3H-1DwQop_U"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=1-3-gJPb35c:q1C9Q9xW9uA:3H-1DwQop_U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=1-3-gJPb35c:q1C9Q9xW9uA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=1-3-gJPb35c:q1C9Q9xW9uA:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/RubyInside/~4/1-3-gJPb35c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.rubyinside.com/heroku-gets-add-ons-serious-ruby-webapp-hosting-made-easy-2664.html/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		<feedburner:origLink>http://www.rubyinside.com/heroku-gets-add-ons-serious-ruby-webapp-hosting-made-easy-2664.html</feedburner:origLink></item>
		<item>
		<title>Gemcutter Is The New Official Default RubyGem Host</title>
		<link>http://feedproxy.google.com/~r/RubyInside/~3/WXttnvaFy84/gemcutter-is-the-new-official-default-rubygem-host-2659.html</link>
		<comments>http://www.rubyinside.com/gemcutter-is-the-new-official-default-rubygem-host-2659.html#comments</comments>
		<pubDate>Mon, 26 Oct 2009 23:48:01 +0000</pubDate>
		<dc:creator>Peter Cooper</dc:creator>
				<category><![CDATA[Cool]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.rubyinside.com/gemcutter-is-the-new-official-default-rubygem-host-2659.html</guid>
		<description><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/rubygems.png" width="113" height="113" alt="rubygems.png" style="float:left; margin-right:12px; margin-bottom:12px;" />Just two months ago <a href="http://www.rubyinside.com/gemcutter-a-fast-and-easy-approach-to-ruby-gem-hosting-2281.html">we posted about Gemcutter</a>, a new RubyGem hosting repository that, we said, was <i>"taking aim at <a href="http://rubyforge.org/">RubyForge</a> and <a href="https://github.com/">GitHub</a>."</i> It only took six weeks <a href="http://github.com/blog/515-gem-building-is-defunct">for GitHub to give up on building gems</a> and to start recommending Gemcutter instead. Today, RubyForge is toppled also. Gemcutter developer Nick Quaranto has <a href="http://update.gemcutter.org/2009/10/26/transition.html">announced that Ruby Central has given the thumbs up</a> to replacing <code>http://gems.rubyforge.org/</code> with <code>http://rubygems.org/</code> (the new Gemcutter URL) as the default gem host in RubyGems.</p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/rubygems.png" width="113" height="113" alt="rubygems.png" style="float:left; margin-right:12px; margin-bottom:12px;" />Just two months ago <a href="http://www.rubyinside.com/gemcutter-a-fast-and-easy-approach-to-ruby-gem-hosting-2281.html">we posted about Gemcutter</a>, a new RubyGem hosting repository that, we said, was <i>"taking aim at <a href="http://rubyforge.org/">RubyForge</a> and <a href="https://github.com/">GitHub</a>."</i> It only took six weeks <a href="http://github.com/blog/515-gem-building-is-defunct">for GitHub to give up on building gems</a> and to start recommending Gemcutter instead. Today, RubyForge is toppled also. Gemcutter developer Nick Quaranto has <a href="http://update.gemcutter.org/2009/10/26/transition.html">announced that Ruby Central has given the thumbs up</a> to replacing <code>http://gems.rubyforge.org/</code> with <code>http://rubygems.org/</code> (the new Gemcutter URL) as the default gem host in RubyGems.</p>
<p>The transition from RubyForge to Gemcutter/RubyGems.org isn't an overnight deal and gem publishing from RubyForge will continue to work for the time being, but within the next couple of months, RubyForge accounts will be merged with Gemcutter and an update will be made to change the canonical gem source (though, of course, you can use Gemcutter already if you like by following <a href="http://gemcutter.org/">their instructions</a>).</p>
<p>What all of this means for you as a Ruby developer is that if you want to release your own RubyGems (or "gems") in future, things will become a lot easier. Gemcutter, if you haven't checked it out, is definitely a refined evolution in terms of gem hosting - you can "push" a built gem to their server with a single command. If you want to learn how, check out <a href="http://railscasts.com/episodes/183-gemcutter-jeweler">Ryan Bates' awesome Gemcutter &amp; Jeweler screencast</a> that demonstrates how to create a gem and deploy it with Gemcutter.</p>
<p style="background-color:#ffd;padding:8px;font-family:verdana;font-size:12px"><a href="http://www.codebasehq.com/?utm_source=rubyinside&amp;utm_medium=footer&amp;utm_campaign=sep09" rel="nofollow"><img src="http://www.rubyinside.com/wp-content/uploads/2009/09/CodebaseLogo-RI.png" width="118" height="37" style="float: right; margin-left: 12px; margin-bottom: 12px" alt="CodebaseLogo-RI.png" /></a><em>[ad]</em> <a href="http://www.codebasehq.com/?utm_source=rubyinside&amp;utm_medium=footer&amp;utm_campaign=sep09" rel="nofollow"><b>Codebase</b></a> is a fast &amp; reliable <b>git, mercurial &amp; subversion hosting</b> service with complete project management built-in - ticketing, milestones, wikis &amp; time tracking - all under one roof. <a href="http://www.codebasehq.com/?utm_source=rubyinside&amp;utm_medium=footer&amp;utm_campaign=sep09" rel="nofollow">Click here to try it - free.</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/RubyInside?a=WXttnvaFy84:xAoa18UTnDg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/RubyInside?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=WXttnvaFy84:xAoa18UTnDg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=WXttnvaFy84:xAoa18UTnDg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=WXttnvaFy84:xAoa18UTnDg:3H-1DwQop_U"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=WXttnvaFy84:xAoa18UTnDg:3H-1DwQop_U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=WXttnvaFy84:xAoa18UTnDg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=WXttnvaFy84:xAoa18UTnDg:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/RubyInside/~4/WXttnvaFy84" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.rubyinside.com/gemcutter-is-the-new-official-default-rubygem-host-2659.html/feed</wfw:commentRss>
		<slash:comments>18</slash:comments>
		<feedburner:origLink>http://www.rubyinside.com/gemcutter-is-the-new-official-default-rubygem-host-2659.html</feedburner:origLink></item>
		<item>
		<title>Boson: A Next Generation Task Framework for Ruby</title>
		<link>http://feedproxy.google.com/~r/RubyInside/~3/XIxknT4pR3k/boson-a-next-generation-task-framework-for-ruby-2657.html</link>
		<comments>http://www.rubyinside.com/boson-a-next-generation-task-framework-for-ruby-2657.html#comments</comments>
		<pubDate>Thu, 22 Oct 2009 21:02:17 +0000</pubDate>
		<dc:creator>Peter Cooper</dc:creator>
				<category><![CDATA[Cool]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.rubyinside.com/boson-a-next-generation-task-framework-for-ruby-2657.html</guid>
		<description><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/boson.png" width="103" height="104" alt="boson.png" style="float:left; margin-right:12px; margin-bottom:12px;" /><a href="http://tagaholic.me/2009/10/14/boson-command-your-ruby-universe.html">Boson</a> is a new command/task framework for Ruby by Gabriel Horner (of <a href="http://www.rubyinside.com/hirb-an-easy-to-use-view-framework-for-irb-1853.html">Hirb</a> fame). Gabriel seems to be trying to supersede <a href="http://rake.rubyforge.org/">Rake</a>, the Ruby "make" equivalent, and from first glance Boson seems to provide many benefits from the "reinvent the wheel" philosophy.</p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/boson.png" width="103" height="104" alt="boson.png" style="float:left; margin-right:12px; margin-bottom:12px;" /><a href="http://tagaholic.me/2009/10/14/boson-command-your-ruby-universe.html">Boson</a> is a new command/task framework for Ruby by Gabriel Horner (of <a href="http://www.rubyinside.com/hirb-an-easy-to-use-view-framework-for-irb-1853.html">Hirb</a> fame). Gabriel seems to be trying to supersede <a href="http://rake.rubyforge.org/">Rake</a>, the Ruby "make" equivalent, and from first glance Boson seems to provide many benefits from the "reinvent the wheel" philosophy.</p>
<p>Anyone who's built a Rakefile knows it's not the most straightforward syntax, so Boson's approach of using regular Ruby code in the shape of methods added to a module is refreshing. Tasks are methods, methods are tasks - simple. Within these methods, you can use the <code>options</code> helper method and passed arguments to access command line options and other data. Another feature is that while, like with Rake (or Thor), Boson can execute commands from the command line, you can <i>also</i> do so from IRB (the Ruby "console").</p>
<p>It's always a bit of a crapshoot when new tools come out in the Ruby world. Some catch on, some don't. Gabriel has clearly put a lot of thought into Boson, though, so if enough people are fed up with using Rake for command launching, I think it could catch on. <a href="http://tagaholic.me/2009/10/14/boson-command-your-ruby-universe.html">Gabriel's blog post</a> outlines what Boson does perfectly. For those ready to shoot down Rake, though, don't forget to read <a href="http://www.jbarnette.com/2009/08/27/on-rake.html">John Barnette's awesome, recent <i>On Rake</i> post.</a> Rake's not just about launching tasks - it's a killer dependency resolution engine at heart, and that can result in less code if you approach your problems the right way.</p>
<p><em>(Aside: Sorry for the slow week at Ruby Inside. Six days ago my wife gave birth to our daughter and since she had a C-section, I'm playing housewife. I have quickly discovered if you're a housewife - or husband! - you have about zero hours left at the end of the day to do any other work.. I shall try my best!)</em></p>
<p style="background-color:#ffd;padding:8px;font-family:verdana;font-size:12px"><a href="http://mobileorchard.com/training?inside"; rel="nofollow"><img src="http://www.rubyinside.com/wp-content/uploads/2009/06/rupho.png"; width="74" height="40" alt="rupho.png" style="float:left; margin-right:12px;" /></a><em>[ad]</em> <strong>Mobile Orchard's <a href="http://mobileorchard.com/training?inside">from Rubyist to iPhone programmer in 2 days class</a></strong> is coming to Portland/OR Nov 12-13 and Los Angeles/CA Nov 19-20. <del>$1200</del> $799 with early reg and "inside" discount code. <em>Note that the early registration price ends tomorrow - 10/23!</em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/RubyInside?a=XIxknT4pR3k:J4rJdwzPf_s:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/RubyInside?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=XIxknT4pR3k:J4rJdwzPf_s:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=XIxknT4pR3k:J4rJdwzPf_s:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=XIxknT4pR3k:J4rJdwzPf_s:3H-1DwQop_U"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=XIxknT4pR3k:J4rJdwzPf_s:3H-1DwQop_U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=XIxknT4pR3k:J4rJdwzPf_s:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=XIxknT4pR3k:J4rJdwzPf_s:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/RubyInside/~4/XIxknT4pR3k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.rubyinside.com/boson-a-next-generation-task-framework-for-ruby-2657.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://www.rubyinside.com/boson-a-next-generation-task-framework-for-ruby-2657.html</feedburner:origLink></item>
		<item>
		<title>21 Rack Middlewares To Turbocharge Your Ruby Webapps</title>
		<link>http://feedproxy.google.com/~r/RubyInside/~3/nBom6daZqy4/21-rack-middlewares-2649.html</link>
		<comments>http://www.rubyinside.com/21-rack-middlewares-2649.html#comments</comments>
		<pubDate>Wed, 14 Oct 2009 17:28:43 +0000</pubDate>
		<dc:creator>Peter Cooper</dc:creator>
				<category><![CDATA[Compilation Posts]]></category>
		<category><![CDATA[Elsewhere]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.rubyinside.com/21-rack-middlewares-2649.html</guid>
		<description><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/rack-logo.png" width="132" height="68" alt="rack-logo.png" style="float:left; margin-right:12px; margin-bottom:12px;" />If you've worked with Web apps using Ruby, you might know of <a href="http://rack.rubyforge.org/">Rack</a>, an interface that sits between Ruby applications and HTTP-speaking Web servers. All of the major Ruby frameworks and server setups use it now, including Rails. Middleware (in Rack) is code that manipulates data going back and forth between your Ruby apps and the HTTP server. You can use middleware to intercept requests, change data in mid-flow, etc. Ryan Bates has a great <a href="http://railscasts.com/episodes/151-rack-middleware">screencast tutorial</a> if you're new to the concept and want to build your own.</p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rubyinside.com/wp-content/uploads/2009/10/rack-logo.png" width="132" height="68" alt="rack-logo.png" style="float:left; margin-right:12px; margin-bottom:12px;" />If you've worked with Web apps using Ruby, you might know of <a href="http://rack.rubyforge.org/">Rack</a>, an interface that sits between Ruby applications and HTTP-speaking Web servers. All of the major Ruby frameworks and server setups use it now, including Rails. Middleware (in Rack) is code that manipulates data going back and forth between your Ruby apps and the HTTP server. You can use middleware to intercept requests, change data in mid-flow, etc. Ryan Bates has a great <a href="http://railscasts.com/episodes/151-rack-middleware">screencast tutorial</a> if you're new to the concept and want to build your own.</p>
<p><em>P.S. I know the term "middlewares" sounds borderline insane, but.. it works, you know what it means - yada, yada ;-)</em></p>
<p>In this post, we're going to highlight various Rack middlewares from CodeRack, an on-going Rack middleware competition:</p>
<div style="margin-left: 1.2em">
<p><a href="http://coderack.org/users/qoobaa/entries/34-karma-chameleon">Karma Chameleon</a> - Focused at Rails developers, Karma Chameleon makes it easy to automatically have file extensions added to all of your app's links and URLs. The humorous motivation for this is so that you can have all your pages use ".aspx" or ".php" extensions to look better in corporate environments. Joking aside, though, this is a cute, well written middleware that's worth looking at.</p>
<p><a href="http://coderack.org/users/jtrupiano/entries/37-rackrewrite" rel="nofollow">Rack::Rewrite</a> - This middleware is a clever attempt at implementing some of Apache's mod_rewrite functionality in Rack. So far it has support for doing basic rewrites (where URLs are changed mid-request before they hit the backend) and HTTP 301 and 302 redirects.</p>
<p><a href="http://coderack.org/users/tylerhunt/entries/6-canonical-host" rel="nofollow">Canonical Host</a> - This middleware lets you specify a "canonical hostname" for your application so that any requests to other hostnames are redirected to the same URL on the canonical hostname.</p>
<p><a href="http://coderack.org/users/webficient/entries/38-racktidy" rel="nofollow">Rack::Tidy</a> - Rack::Tidy cleans up HTML markup by automatically indenting and reformatting content. If you want the output from your Web apps to look clean (especially if you used ERb!), this is worth a try, although it expects valid markup in order to perform its cleaning..</p>
<p><a href="http://coderack.org/users/MetaSkills/entries/15-zombie-shotgun" rel="nofollow">Zombie Shotgun</a> - The Zombie Shotgun provides protection against Microsoft Windows zombie attacks! It rejects requests from known "evil" user agents and to known nefarious URL paths. I dare say this is a useful middleware to throw in front of almost anything.</p>
<p><a href="http://coderack.org/users/Rasputnik/entries/32-imagesizer" rel="nofollow">ImageSizer</a> - This middleware adds an HTTP header to the HTTP response when serving images that provides the image's dimensions. It works with both static and dynamically generated images as it get used after your code has provided the image.</p>
<p><a href="http://coderack.org/users/Simon/entries/39-firebug-logger" rel="nofollow">Firebug Logger</a> - Adds logging to your Rack-powered app for use in the <a href="http://getfirebug.com/">Firebug</a> Firefox extension or Webkit/Safari's Inspector.</p>
<p><a href="http://coderack.org/users/Postmodern/entries/27-enforcessl" rel="nofollow">EnforceSSL</a> - EnforceSSL lets you ensure that certain paths are only reached securely over HTTP/SSL. If a path denoted as sensitive is requested over regular HTTP, an HTTP 307 redirect will be issued (as an aside, I didn't know about <a href="http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#3xx_Redirection">HTTP 307</a> till now - it's worth reading about).</p>
<p><a href="http://coderack.org/users/freels/entries/24-inlineuploader" rel="nofollow">InlineUploader</a> - This middleware sells itself! <i>"Need inline uploads for files like the way GMail handles email attachements? InlineUploader makes it easy! InlineUploader provides a generic file upload endpoint and a way to attach uploaded files to subsequently submitted form data."</i></p>
<p><a href="http://coderack.org/users/Postmodern/entries/25-referercontrol" rel="nofollow">RefererControl</a> - A middleware that restricts access to certain paths based on the <code>Referer</code> header. Rather than blocking people who have no referrer, however, this middleware is intended to <i>enforce</i> certain referrers so that users follow the intended flow of a site.</p>
<p><a href="http://coderack.org/users/sam/entries/21-rackgoogleanalytics" rel="nofollow">Rack::GoogleAnalytics</a> - Rack::GoogleAnalytics automatically adds the Google Analytics tracking code into the HTML pages of your applications. A very simple middleware with code to match (so it's worth looking at if you want to try writing a basic middleware of your own), though I'm not sure whether this sort of thing should be in middleware to start with..</p>
<p><a href="http://coderack.org/users/julioody/entries/20-racknoie" rel="nofollow">Rack::NoIE</a> - This middleware is self described as "the coolest Rack middleware ever created." I'm not so sure about that but it <i>does</i> redirect Internet Explorer 6 users away from your Web site. Supposedly the CodeRack site itself uses this middleware!</p>
<p><a href="http://coderack.org/users/Postmodern/entries/26-banhammer" rel="nofollow">BanHammer</a> - A very simple middleware app that restricts access to specified IPv4/v6 addresses and ranges.</p>
<p><a href="http://coderack.org/users/wbzyl/entries/19-rackcodehighlighter">Rack::Codehighlighter</a> - This middleware automatically applies a code highlighter (of your choice out of CodeRay, Syntax, and Ultraviolet) to any source code embedded within <code>PRE</code> tags in your HTML pages. This could be particularly handy if you're using a Ruby blogging tool that doesn't provide this feature.</p>
<p><a href="http://coderack.org/users/jbr/entries/14-response-time-injector" rel="nofollow">Response Time Injector</a> - Want the full app response time in the body of your served HTML someplace? This middleware substitutes any reference to "$responsetime" in your response body with the amount of time the response took. Could be handy for debugging. It even lets you specify a format to show the time in.</p>
<p><a href="http://coderack.org/users/drnic/entries/17-probably-versioned" rel="nofollow">Probably Versioned</a> - A middleware by <a href="http://drnicwilliams.com/">Dr Nic Williams</a>! Probably Versioned provides the ability to add a version reference into the URLs/routes for your application without affecting your app.. e.g. <code>www.example.com/v1/some/path.json</code> - As Nic explains, however, this is a precautionary tactic to ensure your users use future-proof URLs rather than a permanent fix as you're on your own when version 2 comes along ;-)</p>
<p><a href="http://coderack.org/users/cwninja/entries/18-rackproxy" rel="nofollow">Rack::Proxy</a> - Provides proxying abilities. For example, you could pass remote API calls through your own app/URL scheme. This is one of the middlewares that could probably go on to be a bigger deal with some serious extensions.</p>
<p><a href="http://coderack.org/users/laktek/entries/11-server-proxy" rel="nofollow">Server Proxy</a> - From the name, Server Proxy sounds similar to Rack::Proxy, but Server Proxy is specifically for bypassing cross-domain access restrictions (from AJAX, say). It provides a simple way to proxy requests to remote APIs through your existing site, e.g. <code>http://localhost:3000/server_proxy?service_url=twitter.com&amp;service_path=statuses/public_timeline.xml</code> - you'd need to beware of the security issues with this though!</p>
<p><a href="http://coderack.org/users/Gaius/entries/7-casrack-the-authenticator" rel="nofollow">Casrack the Authentication</a> - A middleware that provides <a href="http://www.jasig.org/cas">CAS</a> (Central Authentication Service) support. CAS is a centralized authentication system initially developed by Yale. I'm not aware of CAS but it looks like a well put together middleware to solve a specific problem. Note: You'll need to be up to speed with <a href="http://gemcutter.org/">Gemcutter</a> to install it as a gem but <a href="http://github.com/gcnovus/casrack_the_authenticator">the code is on GitHub too</a>.</p>
<p><a href="http://coderack.org/users/luigi/entries/4-rackchromeframe" rel="nofollow">Rack::ChromeFrame</a> - Recently Google <a href="http://code.google.com/chrome/chromeframe/">released a plugin</a> for Internet Explorer that provides its own Chrome browser's functionality within existing IE windows. This middleware makes the pages served demand the use of Google Chrome Frame on supported browsers.</p>
<p><a href="http://coderack.org/users/maciej/entries/2-rakismet-akismet-client" rel="nofollow">Rakismet</a> - Rakismet can pipe the comments your site received through the Akismet comment spam checker. There's no documentation here yet, but the code provides a nice example of interacting with Akismet that could be useful even if you don't use the middleware.</p>
</div>
<p style="background-color:#ffd;padding:8px;font-family:verdana;font-size:12px"><a href="http://mobileorchard.com/training?inside"; rel="nofollow"><img src="http://www.rubyinside.com/wp-content/uploads/2009/06/rupho.png"; width="74" height="40" alt="rupho.png" style="float:left; margin-right:12px;" /></a><em>[ad]</em> <strong>Mobile Orchard's <a href="http://mobileorchard.com/training?inside" rel="nofollow">from Rubyist to iPhone programmer in 2 days class</a></strong> is coming to Portland/OR Nov 12-13 and Los Angeles/CA Nov 19-20. <del>$1200</del> $799 with early reg and "inside" discount code.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/RubyInside?a=nBom6daZqy4:JmmoWXic_9c:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/RubyInside?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=nBom6daZqy4:JmmoWXic_9c:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=nBom6daZqy4:JmmoWXic_9c:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=nBom6daZqy4:JmmoWXic_9c:3H-1DwQop_U"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=nBom6daZqy4:JmmoWXic_9c:3H-1DwQop_U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RubyInside?a=nBom6daZqy4:JmmoWXic_9c:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/RubyInside?i=nBom6daZqy4:JmmoWXic_9c:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/RubyInside/~4/nBom6daZqy4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.rubyinside.com/21-rack-middlewares-2649.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.rubyinside.com/21-rack-middlewares-2649.html</feedburner:origLink></item>
	</channel>
</rss>
