SmartLogic Logo (443) 451-3001

Blog

Directory Conventions for Rack Middleware RubyGems

May 13th, 2010 by

I just wanted to make a quick note about directory conventions for rack middleware gems. For all gems you should follow the convention of housing all of your code inside a single file and directory of the same name as your gem within lib, e.g.


$> ls -l ~/projects/timecop/lib
drwxr-xr-x 5 john staff 170 Jan 14 20:31 timecop
-rw-r--r-- 1 john staff 82 Jan 14 20:31 timecop.rb

The reason for this is related to how RubyGems hijacks Ruby’s require method. When a gem is activated its lib/ folder is added to the load path. This means that anything inside that directory is now accessible via the require method. In order to avoid file naming collisions across gems, you must name these exactly the same as your gem. (see slides for I Don’t Trust Your Code for a more complete discussions of this)

However, this is slightly different with rack gems. The convention for naming rack middleware is by using a dash, e.g. rack-rewrite. The convention for requiring rack middleware though is to replace that dash with a slash, e.g. require 'rack/rewrite'.

The convention I’ve adopted for structuring rack middleware within a gem is to include a file by the same name as the gem and a rack directory in lib/, and then to include the second part of the middleware name as a subdirectory under that.


~/projects/rack-rewrite (master) $> ls -l lib/
total 8
drwxr-xr-x 4 john staff 136 Apr 17 18:02 rack
-rw-r--r--@ 1 john staff 22 Apr 17 18:02 rack-rewrite.rb

~/projects/rack-rewrite (master) $> ls -l lib/rack
total 8
drwxr-xr-x 3 john staff 102 May 13 11:09 rewrite
-rw-r--r--@ 1 john staff 827 Apr 17 18:02 rewrite.rb

This allows my users to use either require 'rack-rewrite' or require 'rack/rewrite'.

Rack::Rewrite 1.0.0 Released

May 13th, 2010 by

Rack::Rewrite 1.0.0 has just been released. To install simply run: gem install rack-rewrite.

Rack::Rewrite is a web-server agnostic rack middleware for defining and applying rewrite rules. In many cases you can get away with Rack::Rewrite instead of writing Apache mod_rewrite rules.

Documentation is hosted at RubyForge. The source code is hosted at GitHub.

Updates include:

Read the rest of this entry »

Installing PostGIS 1.5 on PostgreSQL 8.4 on Ubuntu

March 4th, 2010 by

I had a bit of trouble installing the latest PostGIS 1.5 under PostgreSQL 8.4. Here are my instructions. These work on Ubuntu 8.04, 9.04, 9.10, 10.04, and 10.10.

Read the rest of this entry »

Setting Up Ubuntu 9.10 for Ruby On Rails Development

February 1st, 2010 by

This is a document I put together at the beginning of 2010 while building yet another Ubuntu VM, digging through our internal documentation to try and find out what I needed. We’ve got the answers, and generally Ruby, Rails, and Ubuntu are pretty good about telling you how to install tools if you don’t have them yet.

But the answers are spread out and distributed randomly. Plus, I can only see “The program ‘______’ is currently not installed. You can install it by typing: sudo apt-get install ______” so many times before I lose interest and put off the task.

Read the rest of this entry »

Using Byobu and Landscape to improve remote Ubuntu sessions

January 22nd, 2010 by

SSHing into remote servers can be an awkward experience, but it doesn’t have to be. You can turn your ssh console into a terminal-style window manager with Byobu, and get more system information via landscape.
Read the rest of this entry »

Rack::Rewrite 0.2.1 Released

January 6th, 2010 by

Rack::Rewrite 0.2.1 has just been released. To install simply run: gem install rack-rewrite.

Rack::Rewrite is a web-server agnostic rack middleware for defining and applying rewrite rules. In many cases you can get away with Rack::Rewrite instead of writing Apache mod_rewrite rules.

Documentation is hosted at RubyForge. The source code is hosted at GitHub.

Updates include:

Read the rest of this entry »

Why We’re Excited about the Maryland Tech Crawl

December 10th, 2009 by

SmartLogic has teamed up with mp3Car.com and the Emerging Technology Centers (ETC) to create the Maryland Tech Crawl, an annual technology show and tell event to showcase the technologies being developed in our region. We already have commitments from 20 presenting companies and more than 140 attendee registrations. We expect to have about 200 participants in total.

Maryland Tech Crawl

Maryland Tech Crawl


The Tech Crawl is being held Wednesday, December 16 from 4:30PM to 7:30PM at ETC’s Canton location.

Read the rest of this entry »

Timecop 0.3.4 Released

December 7th, 2009 by

Timecop 0.3.4 has just been released. To install simply run: gem install timecop.

Timecop is a RubyGem providing “time travel” and “time freezing” capabilities, making it dead simple to test time-dependent code. It provides a unified method to mock Time.now, Date.today, and DateTime.now in a single call.

Documentation is hosted at RubyForge. The source code is hosted at GitHub.

Updates include:

Read the rest of this entry »

Rack::Rewrite + Google Analytics Makes Site Transitions Seamless

November 24th, 2009 by

At SmartLogic we recently rebuilt our website in rails. The previous version was a MediaWiki installation with a ton of content that had garnered a decent bit of Google juice that we did not want to lose. By setting up 301 permanent redirects for the old URL’s, we can hold onto that juice.

Read the rest of this entry »

Web 2.0 Expo NYC Wrap Up

November 23rd, 2009 by

John and I went to the Web 2.0 Expo in New York City last week to learn about new trends in Web 2.0 and to try meet interesting people in the industry. We had fun, and I even won a Flip Ultra HD from the folks at a party hosted by Rackspace and Neustar. This post includes my notes from various sessions from the weekend.

Ignite NYC

Read the rest of this entry »