Rails 3 Bugmash

RailsBridge has organized a Rails 3 Bugmash on January 16th and 17th. The idea is to try and upgrade your apps and favourite plugins/gems to work with Rails 3 and make the upgrade path as smooth as possible for everyone else by documenting the process and fixing the bugs you encounter. Rails core team and others will be around in #railsbridge to help out the participants during the bugmash. Check the RailsBridge announcement for more details.

Announcing the Rails activists

Railway station crowd

Bringing Rails and Merb together is about more than just merging the respective code. We’re also picking up the best ideas from both communities beyond the code. Following on Merb’s success in offering a strong evangelism effort, we’re pleased to announce the creation of the Rails activists:

The mission of the Rails activists is to empower and support the worldwide network of Ruby on Rails users. We do this by publicizing Rails, making adoption easier, and enhancing developer support.

At launch, we’ve identified seven areas where the Rails activists can contribute to the Rails ecosystem:

  • Public Relations with media of all sizes
  • Ombudsman work to ensure good user-to-user support
  • Community Leadership at events and conferences
  • Media Organization to help create good promotional opportunities
  • Website maintenance
  • Documentation efforts
  • Developer support

The initial members of the Rails activists are Gregg Pollack, Matt Aimonetti, Ryan Bates, and Mike Gunderloy. But we can’t do all this alone, nor do we want to! Our vision includes a large and vibrant Rails network composed of other activists, bloggers, event hosts, authors, and developers. Our intent is to provide connections, resources, and support to help the entire ecosystem to grow. To start things off, we’re bringing in a lot of our own projects, including videos, screencasts, case studies, Rails documentation, and more – we’re a working group, and we hope you’ll work with us.

If you have ideas about improving the Rails community, projects you want to participate in, or are just looking for ways to get involved, get in touch with us! There are a lot of ways to do that:

We look forward to hearing from you!

For additional perspectives from the activists, see the posts by Gregg Pollack, Matt Aimonetti, and Mike Gunderloy.

Photo by Flickr user caravinagre

3 Weeks in Rails (October 29, 2008)

It’s been 3 weeks (I know I’ve been slacking). However, it’s time to write out another summary of information that any Rails developer might want to know about. Detailed audio versions of these notes can be found on the Rails Envy Podcast #51, #52, and #53.

You may already be aware that Rails 2.2 RC1 was released last Friday. For a glimpse at the new features you can read through the Release Notes. However, if you’re looking for something more comprehensive check out the Envycast on Ruby on Rails 2.2^ or the What’s New PDF by Carlos Brando.

Rails 2.0.5 and Rails 2.1.2 were also pushed in the last few weeks, mostly just plugging up a few small security concerns. If you’re on 2.x, you should probably take the time to upgrade.

If you’re taking advantage of the localization features of Rails 2.2, there are two libraries you should probably be aware of. First, Diego Carrion recently created a fork of restful_authentication where he added full support for i18n. Secondly, Karel Minarik recently released a plugin for doing localized_country_select so you can display countries the appropriate language.

If you need your Rails application to receive emails, one way to do it is to use gmail IMAP. John Nunemaker wrote up a nice walkthrough showing all the scripts need to parse email out of gmail.

Hosting, Performance, and Tuning

With Rails 2.2 thread safety, you might assume that brings a performance boost for everyone. However, this is not always the case and Pratik Naik explains why.

Ilya Grigorik wrote a blog post about Scaling Rails with MYSQL Plus where he uses the Non-Blocking MySQL driver from Neverblock to get some increased performance out of ActiveRecord which is quite impressive.

If you need to implement full text search in your Rails application, and you are already thinking Sphinx, you may want to check out the Thinking Sphinx PDF by Pat Allan over on Peepcode.

Library News

If you’re a fan of resource_controller (skinny REST controllers) and Shoulda you shoulda definitely check out the starter app by James Golick called Blank.

The next time you need to build a “Software As A Service” website (like basecamp), check out Service Merchant. This gem sits on top of Active Merchant and gives you everything you need to do Subscription Billing.

Do you ever forget your Rails routes? There’s always the “rake routes” command, but that’s not very user friendly. You might want to check out Vasco. Vasco is a Route explorer for Rails which provides a nice web interface to browse through and test all your Rails routes.

If you ever need to build a Rails application which is accessible on multiple domains or multiple paths (like foo.com or bar.com or a.com/foo) then take a look at the Rails Proxy Plugin by Sean Huber. This plugin allows you to dynamically respond to proxied requests by detecting the incoming path and properly setting the session domain, default host, and relative url root.

If you need an easy way to test your plugin which extends ActiveRecord, check out acts_as_fu, which aside from it’s unfortunate name, is pretty slick.

If you came over from PHP, you’re probably familiar with phpMyAdmin. One of the Rails Rumble teams made a Ruby version of phpMyAdmin that’s definitely worth checking out if you’re missing a quick web interface to your db.

Event News

The Rails Rumble is over and you only have 3 more days to vote (voting closes on Midnight November 1st). Cast your vote! It’s good practice for next Tuesday (least in the US).

If you’re over in London, Ruby Manor is taking place November 22nd. Looks like it’s going to be a fun unconference type of event.

Lastly, Rubyconf is next week here in Orlando, Florida where it’s been kinda chilly lately. Definitely pack something warm just in case, and see you next week!

Image Credit: Blue Sky on Rails by ecstaticist, Analog Solutions 606 Mod by Formication, RailsConf Europe 2006 by Paul Watson, Rainbow by One Good Bumblebee
^ In the interest of full disclosure, I do produce Envycasts, and profit from the sale of the screencasts.

2 Weeks in Rails (October 10, 2008)

Welcome to yet another edition of this Week in Rails where we summarize some of the most interesting stories of the past two weeks. If you’d rather listen to these stories with additional detail check out the Rails Envy Podcast episode #49 and #50

Michael Koziarski recently removed country_select from edge rails. Apparently Rails was using the ISO 3166 Long Names standard list of countries, but some people don’t think this list is politically correct. For instance it lists “Taiwan” as “Taiwan, province of China”. Rather then change this one and have to deal with other debatable country names, country_select has been moved to a plugin, so you can fork your own friendlier list of countries.

Rails built in REST support is great, but if you’ve really spent time making your API usable, you’ve probably found that you had to make tweaks to what gets rendered to the page when a user wants xml or json. Chris Heald wrote up one solution on his blog this week, which shows you how to use xml builder to produce xml which gets translated for your xml, json, and maybe even yaml output formats.

If you ever find yourself needing to add role-based authorization to your Rails app, you should check out a blog post this week by Ernie Miller. He gives a unique implementation worth taking a look at.

Hosting, Performance, and Tuning

If you use Slicehost as your ISP for websites, Mark Reynolds wrote up a script that will install and fully configure your slice to get up and running with Rails, Mysql, and Thin.

We all should probably be load testing our applications more then we do, but this isn’t something that’s done easily. Luckily our favorite Ruby Hero, Ilya Grigorik recently wrote up a tutorial which serves as a great guide to accurately benchmarking our Rails apps.

If you’re looking for additional tools to help fine tune your Ruby code, Dan Mayer wrote up a great overview of just about everything available.

Databases

Alexander Lang recents wrote up a blog post entitled A CouchDB primer for an ActiveRecord mindset. He gives a simplified introduction to Couch db, goes over a few Ruby libraries that interface with it, and lastly introduces his new Ruby library called CouchPotato.

A few weeks back Rama McIntosh published a really useful script on his blog if you ever need to convert your application from one database to another using ActiveRecord.

Library News

Is your rails app pre-Rails 2.1 and you’re envious of those readable named_scope methods? Ken Collins has back-ported named_scope to Rails 1.2.6 and 2.0.4 so you can take advantage of using this method.

If you’re using RSpec to test your Rails app, you may be interested to know that the RSpec Story Runner (where you do your integration tests) is going to be replaced by a Cucumber. Although it’s typically not a good thing to be replaced by a Cucumber, this particular one is a library written by Aslak Hellesoy which should bring some increased organization and additional benefits to your integration tests. If you want to get a head start on consuming the cucumber, then check out Aslak’s blog post.

Talking about Testing, Shoulda 2.0 was recently released witch includes a few improvements and bugfixes. If you’d like an overview of everything Shoulda has to offer, Kyle Banker wrote up a great shoulda cheat sheet you should take a look at.

Noel Rappin, the same guy who brought you Rails iui, recently released TankEngine, a new rails plugin for targeting the iPhone and Mobile Safari. It uses a jQuery based javascript layer and it’s much more flexible and has better helpers then the original Rails iui.

Marc-Andre Cournoyer recently released Thin 1.0, the ultra fast Web Server. There’s quite a few people that have moved to thin from mongrel in their production environments.

Tog 0.2.1 was recently released, which is a collection of plugins that together form a social networking app. What’s great about Tog is that you can pick out just one plugin, like messaging, blogs, or CMS and bring that part into your existing Rails app.

Workling 0.3 was released last week, which serves as a great way to deal with background tasks in your Rails app, no matter what messaging queue service you’re using.

The Weather Channel provides a great API to pull down the current weather and forecasts around the world. Jared Pace recently created a Gem called WeatherMan which allows you to take full advantage of this data.

Jan De Poorter has recently revived the RailsXLS plugin which uses a java bridge and jakarata to let you use ruby to create excel spreadsheets.

Event News

The Rails Rumble is taking place October 18th and 19th. It’s a 48 hour contest where you get one weekend to design, develop, and deploy the best web app you can, using Rails.

If you didn’t make it out to the WindyCityRails conference, Josh Symonds wrote up a nice overview.

If you live in the Great Lakes Area, you should check out the Great Lakes Ruby Bash, taking place October 11th in Ann Arbor, Michigan.

Scotland on Rails is being held in Edinburgh March 26 through 28th. Tickets aren’t available yet but the call for proposals are open if you’d like to speak.

Image Credit: Blue Sky on Rails by ecstaticist, Analog Solutions 606 Mod by Formication, RailsConf Europe 2006 by Paul Watson, Rainbow by One Good Bumblebee.

This Week in Rails (September 24, 2008)

Welcome to the sixth addition of This Week in Rails, where we’ll take a look of the past two weeks of innovation in the Rails community. If you’d rather listen to this content on your ipod with additional Ruby news, check out the Rails Envy Podcast #47 and #48.

The Rails Guides Hackfest is in full swing, improving the Rails documentation by leaps and bounds. Rails Routing from the Outside In by Mike Gunderloy is a great read if you’re ever confused by Rails Routing. If you want to help with the Guide hackfest, there are several guides up that you can help review.

If you ever need to build a website which allows users to upload videos and then needs to encode them, definitely check out Panda, an open source video encoding application which uses EC2, S3, and SimpleDB. The application itself is written in Merb, but it’s designed to run separately on ec2 and can easily integrate with your rails app on the front end.

If you’d like to ensure your Rails application is well written, Matt More wrote up a Rails Code Quality Checklist which serves as a great guide to Rails best practices. Also, if you need help discovering where your code might need a little re-factoring check out Roodi a new gem by Marty Andres that gives you instant feedback about your Ruby code by examining a few metrics including cyclomatic complexity, method length, bad method names, and blank blocks or loops. Lastly, if you’ve been following the “skinny controller, fat model” best practice, you may have found yourself with really fat models (not so good). Paul Barry suggests one way to deal with this using concerned_with.

If you’re about to start a new Rails application then you might consider using Bort, a Rails starter application from Jim Neath. Bort contains RESTful Auth, Will Paginate, Exception Notifier, Asset Packager, a Capistrano Recipe, and everything is tested by RSpec. If you’d rather start your system with email login instead of username, Matt Hall put together a fork of bort for this.

Implementing a page with multiple file uploads in Rails is no easy task. Luckily, Brian Getting wrote up a tutorial which makes it look easy.

Clemens Kofler wrote up a Guide to Memoization which walks through all the details of this convention and looks at the new “memoize” helper in Edge Rails ActiveSupport. If you don’t know what this word means, please do take the time to read his tutorial.

If you’ve ever developed a plugin, you may have just decided to manually run your tests every time you change your code. Last week Ken Collins recently put out a new library called Autotest Railsplugin which makes it dirt simple to run autotest on plugins you’re developing.

Lastly, if you’re looking for other Ruby/Rails podcasts, check out the Rails Podcast which recently featured Jim Weirich at erubycon, Rubyology which recently interviewed Avi Bryant, the Learning Rails podcast which recently covered how to deploy your rails app, Railscasts which recently covered starling and workling, and the Rails Brazil Podcast if you speak Portuguese.

That’s all for now. If you create or discover any notable tools or blog posts this week, feel free to send me an email (Gregg@RailsEnvy).

Image Credit: Still on the right track by janusz l

This Week in Rails (September 10, 2008)

Welcome to the fifth edition of This Week in Rails, a weekly report with highlights from the Rails community. Antonio Cangiano (the original author) has been pretty busy, so I figured I’d step in this week.

As you probably already know, Rails 2.0.4 and Rails 2.1.1 were released this week. Both are mostly bug fixes, but checkout the changelog if you want all the details.

If your Rails app has alot of heavy duty SQL Queries you may want to take a look at a plugin by Fernando Blat called Query memcached. This plugin overwrites Rails default query cache functionality, storing all database queries in memcached for use by sequential requests.

Have you ever implemented an advanced search page for a Rails application? If yes, you may have ended up with bloated controller code. One solution to the problem is Searchgasm by Binary Logic which helps you do object based searching, and keep your search code clean and simple.

Ryan Daigle told us about some great new features in Rails Edge, including Connection Pooling, Shallow Routes, and Mailer Layouts. We should be getting a Rails 2.2 beta any day now, so stay tuned for that.

If you have any Java friends who use Apache Derby who are looking to try out JRuby, Michael Galpin wrote up an introduction to Rails using JRuby and Derby.

Last week Mark Imbriaco from 37 Signals put together a great blog entry and screencast which shows how they use HAProxy in their server setup. If you’re not familiar with the benefits of using HAProxy over the apache round robin load balancer, you need to watch his screencast.

Perhaps you’ve started using jQuery instead of Prototype for Rails. You might have used a plugin for this (ex. jQuery on Rails), but if you started from scratch you might have run into that problem with sending authenticity tokens with your AJAX requests. Lawrence Pit posted the jQuery code you’ll need to take care of this.

Neverblock is a library that allows you to use Ruby Fibers to write non-blocking concurrent code. This project recently released a non-blocking PostgreSQL adapter, a non-blocking MySQL adapter, and most recently got their Fiber library running on Ruby 1.8 with Rails with some amazing benchmarks! It’s still a very young project, but it’s one more step towards a safely multi-threaded Rails stack.

Lastly, I’ve got some events to tell you about. Ruby DCamp is taking place October 11th-12th in Arlington, VA, the Rails Summit Latin America is taking place October 15th and 16 in Sao Paulo, Brazil, and the South Carolina Ruby Conference is on October 18th in Columbia, SC.

Thanks for reading! If you would have rather listened to this information (with slightly more detail), you should check out the Rails Envy Podcast #46 which came out today. It’s no mistake that it’s covering the same material (I help with the podcast).

This Week in Rails (July 26, 2008)

Welcome to the fourth edition of This Week in Rails, a weekly (and occasionally fortnightly) report with highlights from the Rails community.

David broke the news of the availability of confirmed and scheduled talks at RailsConf Europe which will be taking place this coming September. As you can see there will be a lot of exciting material this year, too.

The e-book Ruby on Rails 2.1 – What’s New is now available in 7 languages: English, Portuguese, Japanese, Simplified and Traditional Chinese, Italian and Korean. A Spanish version is coming as well. Olé!

A couple of weeks ago I took a close look at three Rails 2.1 database related bugs. On the same day, Phusion Passenger 2.0.2 was released. This edition backports a few bug fixes, including one for a small memory leak, and as such it’s highly recommended for anyone using Passenger 2 (aka mod_rails).

Kawaii is a web-based utility like script/console. The output of the inserted expression is visually appealing when compared to the one we’re used to in the shell. Speaking of shiny things, version 2 of the Open Flash Chart plugin was released. This page shows a few wicked cool, professional looking charts (and their code) that can be generated with it.

The article Mulling Over Our Ruby On Rails Full Text Search Options discusses a few possible options for performing full text searches in Rails applications. When it comes to Sphinx, there are then two prominent plugins: UltraSphinx and ThinkingSphinx. Rein Henrichs from Hashrocket, compares the two approaches in his post titled A Thinking Man’s Sphinx.

The team behind Rails-Doc.org added a few more functionalities, including the ability to document the API for multiple versions of Rails.

Other noteworthy articles were the following:

Ryan Bates was interviewed by FiveRuns and his insightful answers are reported in Rails TakeFive: Five Questions with Ryan Bates. He also published a couple of new railscasts on Liquid safe templates and on Session Based Models.

Rails Envy podcast number 39 was published this week. Check out also their hilarious video about Outdated HTML. And if you haven’t done so already, don’t miss the funniest voicemail and remix the Rails community has heard to date: We ain’t got no RSpec.

If you’d like to read more updates from the Ruby side of things, please head over to This Week in Ruby.

This Week in Rails (July 11, 2008)

Welcome to the third edition of This Week in Rails, a weekly report with highlights from the Rails community. My apologies for the delay of this post, the past two weeks have been pretty crazy, so this edition covers the most interesting articles and news from the past two weeks.

Let’s kick off this report with a couple of maintenance releases by Jamis Buck. Both Capistrano 2.4.3 and Net::SSH 2.0.3 were published two weeks ago. If you use them, consider upgrading.

Rails 2.1 has been out for a while now, but in case you didn’t have a chance to catch up yet, this post collects several links to useful resources which will help bring you up-to-date.

The Pathfinder Development’s blog put out three highly interesting posts. The first is More Named Scope Awesomeness by Noel Rappin, while the second and third ones are Pretty blocks in Rails views and DRYing up Rails Controllers: Polymorphic and Super Controllers, both by Josh Symonds. Another good (and quick) recent read about controllers, was "MVC: How to write controllers ":http://andrzejonsoftware.blogspot.com/2008/07/mvc-how-to-write-controllers.html.

The same Noel also published the second part of “Developing iPhone applications using Ruby on Rails and Eclipse” for DeveloperWorks (part 1
and 2).

FiveRuns released a valuable gem called data_fabric which adds support for sharding and replication to Active Record. The same company also has a contest up and they’re offering two free tickets to RailsConf Europe in Berlin. Speaking of conferences, Fabio Akita announced that there will be a Rails Summit Brazil 2008 this coming October in São Paulo. This will be the first event of its kind for the Rails community in South America.

An improved version (i.e. 1.1.1) of the Oracle enhanced adapter was released, as well as version 0.9.5 of the IBM_DB adapter for DB2 and Informix, which adds support for Rails 2.1.

In purely chronological order, I found the following articles to be worth pointing out: Speed up slow Rails development in vista – a handy tip for developers using Vista, Adding Google Maps To Your Rails Applications, Live fulltext search in Ruby on Rails and Useful Flash Messages in Rails.

The Railscasts website published two new episodes, one on testing through Selenium, and another on semi-static pages.

Finally, let’s close this edition on a lighter note. The next time you are about to create an acts_as_an_evil_genius plugin or other imaginatively named one, think about this post. ;-)

If you’d like to read more updates from the Ruby side of things, please head over to This Week in Ruby.

This Week in Rails (June 26, 2008)

Welcome to the second edition of This Week in Rails, a weekly report with highlights from the Rails community.

Ruby Vulnerabilities

As previously reported by Jeremy Kemper, serious vulnerabilities have been discovered for the main Ruby implementations. The official advisory suggests an upgrade path, but there have been several reports of segmentation faults when using Rails with the patched Ruby 1.8.5 and 1.8.6 versions. The Phusion team has published a patch for Ruby 1.8.6-p111, but as things stand now, it hasn’t been included by the Ruby core team (yet).

If you are using Rails 2.1, Ruby 1.8.7-p22 seems the way to go. Unfortunately, Ruby 1.8.7 is not compatible with previous versions of Rails. If you decide that it’s time to upgrade your applications to Rails 2.1, this article features some handy tips, while this other one warns you about a few gotchas.

Those of you who’re running a version of Ruby that shipped with Mac OS X should wait for the next Apple’s Software Update.

Ajax

Rails is opinionated software, but its support for plugins clearly demonstrates a certain openness to diverging opinions on non-core issues. So while most of us mainly use Protoype, it is fairly common to see folks adopting other JavaScript frameworks as well, particularly jQuery.

Last week Jim Neath published a nice overview which compares jQuery with Prototype, and provides information about using jQuery with Rails through the jRails plugin.

Whatever your Ajax framework of choice is, you may be interested in the new Google Ajax Library API to improve the performance of your applications. Thanks to the tutorial Using Google Ajax Libraries API with Ruby on Rails (soon to be incorporated into a plugin) you can start adopting the API with Rails right now.

MVC

Rails 2.1 adds named scopes, which greatly simplify writing “find logic” within your Active Record models. It’s an extremely useful feature which is well explained in this write-up aptly titled, Named Scopes Are Awesome (we agree). Checkout also Ryan Bates’ railscasts on the subject: named_scope and Anonymous Scopes. You may also be interested in this week’s railscast about Caching in Rails 2.1.

Three other compelling Active Record related posts were, Smart Model, Dumb Controller, Bulk insertion of data with ActiveRecord and Timestamped Migrations on how to make “classic migrations” an available option (see ticket).

Michael Bleigh published a tutorial about dealing with subdomains in Rails applications through the SubdomainFu plugin (which appears to be flexible and very straightforward to use).

XP programming practices such as Test-Driven Development are very popular within the Rails community, but there are still many developers who see testing as a chore. Josh Nichols wrote an overview called A walk through of test-driven development with shoulda that shows you how easy it is to apply TDD to your Rails projects. In this specific case, he adopted the Shoulda plugin which seamlessly adds some assertions, helpers and macros on top of the Test::Unit framework.

Documentation

Aside from api.rubyonrails.org there are many alternatives for quickly visualizing the documentation of the Rails’ API. Last week a new one was launched: rails-doc.org. The current version features rapid searches and user annotations. This last feature in particular has the potential to become truly useful.

Deployment

If you are using Apache and mod_rails, you may want to read this article which provides information about a newly released module called apache-upload-progress.

Finally, Jason Crystal wrote a tutorial for packaging Rails applications for offline use on Mac OS X 10.5.


We’re done for this week. If you’d like to read more updates from the Ruby side of things, please head over to This Week in Ruby.

Multiple Ruby security vulnerabilities

Drew Yao at Apple uncovered a handful of nasty security vulnerabilities affecting all current versions of Ruby. The details are still under wraps because an attacker can DoS you or possibly execute arbitrary code — holy crap! Better upgrade sooner than later.

According to the official Ruby security advisory, the vulnerable Rubies are:

  • 1.8.4 and earlier
  • 1.8.5-p230 and earlier
  • 1.8.6-p229 and earlier
  • 1.8.7-p21 and earlier

Those of us running Ruby 1.8.4 or earlier must upgrade to 1.8.5 or later for a fix. Those on 1.8.5-7 can grab the latest patchlevel release for a fix.

(Please note: Ruby 1.8.7 breaks backward compatibility and is only compatible with Rails 2.1 and later, so don’t go overboard!)

This Week in Rails (June 16, 2008)

This is the first edition of This Week in Rails. As announced by Gregg Pollack a few days ago, this weekly column will cover highlights from the Rails community. My aim is to provide you with a status update as if you’d gone on holidays for a week. I will try to be consistent and publish once a week on Sunday or Monday. Being my first shot, I’ll rely on your feedback to verify that I’m on the right track and that this is useful to you; so please feel free to express your opinion in the comment section below.

With Rails 2.1 out, most developers are looking forward to upgrading their skills (and projects) to the latest release. If you’re one of them, I strongly recommend that you check out the second edition of Carlos Brando’s Ruby on Rails 2.1 – What’s new free e-book, which is available in both English and Portuguese, with an Italian translation currently in the works as well. You can also read Rob Anderton’s excellent overview of Rails 2.1’s improved caching capabilities, as well as its built-in support for memcached.

Last week, Phusion announced the first release candidate of Passenger 2.0 (aka mod_rails). This release introduces support for Rack, opening the door to alternative web frameworks as well. In the same announcement, Ruby Enterprise Edition was formally released. Despite the “Enterprise” label, this is a fully Open Source version of Ruby whose main claim is a reduced memory footprint on Linux and Mac OS X.

Speaking of Enterprise, Dr Nic has released version 1.0.2 of his Composite Primary Keys gem. Starting from version 1.0.0 it finally catches up with Active Record 2.1. Erubis, the fast alternative to ERB, has rolled out support for Rails 2.1 as well, in their 2.6.1 version. A week later, version 2.6.2 was released and it includes support for Ruby 1.9 as well. You can install it by running
gem install erubis or by downloading it from RubyForge.

Last week Ryan Bates put out another two Railscasts. The first is about how to contribute to Rails using Git and is, needless to say, highly recommended. The second one is in regards to substituting pagination with the effect of endless scrolling, like DZone does. As pointed out, there are plugins that do this, but Ryan’s approach builds it from scratch and is definitely worth checking out.

Other interesting articles were: a concise guide to using the Thinking Sphinx plugin (along with the pre-requisite Sphinx primer), Easy and Flexible Breadcrumbs for Rails even though they are clearly not everyone’s cup of tea, and lastly GemPlugins: A Brief Introduction to the Future of Rails Plugins.

In conclusion, two announcements were previously reported in this blog, but they are both worth repeating. The first is the release of Capistrano 2.4 and the second is that registration has opened up for RailsConf Europe 2008. The conference will be held in Berlin, Germany from the 2nd to the 4th of September. By registering before July 15th, you can save up to 150 euros.

That’s it for this week. As you can see there is no shortage of material, given that we’re such an active community. If you’d like to read more updates from the Ruby side of things, please head over to This Week in Ruby.

Two New Weekly Columns

I’d like to introduce two new contributors to the Rails blog.


First up is Chu Yeow. Chu has been putting together weekly Living on the Edge blog posts where he covers what’s been going on in Edge Rails. It seemed to me like it should be on the official blog, so expect to see his weekly updates showing up here shortly.


Secondly is Antonio Cangiano. Antonio started doing blog posts entitled This Week in Ruby a few months back which, as you might expect, cover all the significant events of the prior week. Antonio has agreed to move his weekly “Rails” stories over here, so we can all benefit from getting a summary of what’s going on in the neighborhood.

Then I should probably say a word about me, it’s not like I’m on the core team or work at 37 Signals so why am I here? I’m Gregg Pollack, one of the Rails Envy guys, and I’m here to help cover stories and help shape up the RubyOnRails.org website so the real core team can focus on coding.

So if you have any Rails stories that belong on here please email me (Gregg at RailsEnvy). Worst case scenario I’ll cover it on the next Rails Envy Podcast.

Pratik joins core, retired members go alumni

We’re shaking up the Rails core group a bit. First, please welcome Pratik Naik as the newest member of the group.

He’s been doing great work all around the framework and has been spearheading both the documentation branch in git and a thorough cleanup of Action View internals. We’re really happy to hand him the commit keys to the repository.

Second, we’ve created the Rails core alumni for all the proud members of the core group who are no longer in the day-to-day improvement of the framework itself. All of the alumni are still busy working in the Ruby on Rails ecosystem, but either have their hands full with their business or has dedicated their open source time to other initiatives.

We’re incredibly grateful for all the works you guys have done for Ruby on Rails over the years. And you’re all welcome back in the active core group any time you decide. Thanks guys!

Finally, this means that the current active core group is about half its former size. We’d like to add a few more to that, so hopefully we can pick a few more people who’ve been doing varied work on the framework for a sustained period of time soon.

Rails Rumble 2007

It’s that time of the year again: time for another Rails coding competition. In the spirit of the previous Rails Day contests, Rails Rumble challenges teams of up to four to create the best application possible in just 48 hours. This year’s competition is a little bit differently this time around, so checkout the rules. Judging is now performed by the community, allowing anyone to signup and choose their favorites. Also, your app will be provided a VPS to host the application through the end of October. How cool is that?

If you want to compete, you need to organize quickly, the contest runs on September 8th and 9th.

#rails-contrib and rubyonrails-stacks

RailsConf gave birth to a number of new outlets for sub-communities within the Rails family:

#rails-contrib is a new IRC channel on freenode for contributors to Rails. The Rails core team will hang out there to answer questions, discuss patches, and generally interact with anyone doing implementation work for the Rails framework. It's not meant for general chatter, though. Or for how to use the framework. It's strictly for implementational issues and the contributors working on those.

rubyonrails-stacks is a new forum to discuss how we can get standardized set of images going for Rails that can be deployed on any Xen host or even EC2. I posted a welcome with more details on the forum.

Javascriptian REST

Eric Mill went ahead and created Jester, a library that lets you manipulate your Rails-style resources with javascript models. I think it’s great that we’re seeing implementations in other languages. This python port of Routes implements map.resources, can a python port of ActiveResource be far behind?

Shiny new Subversion and Trac cluster

You’ve all noticed the excruciating Rails svn updates and Trac molasses in the last couple of weeks. Following the release of Rails 1.2 we thoroughly overwhelmed our development server, no small feat for a hefty dual Xeon. Congratulations, all, for your hearty Rails appetite! Your sustained Mbps say more than words possibly could.

Our friends at TextDrive have stepped up once again to keep Rails development running smoothly and your production apps deploying predictably. Please give a warm welcome to our new development cluster, a load-balanced crew of SunFires and Thumpers hosting Trac at dev.rubyonrails.org and Subversion at svn.rubyonrails.org.

Subversion will remain available at the old dev URL so you needn’t touch your live apps. Feel free to migrate to the new URL at your own speed.

Using SQLite3 with Rails

If you are using SQLite3 with a Rails application, make sure you are using SQLite3 3.3.7 or earlier. Versions after 3.3.7 incompatibly changed the way in which default values are stored, making it so that current versions of Rails get into quoting issues and problems with columns with NULL defaults.

The source code for version 3.3.7 may be downloaded here: sqlite-3.3.7.tar.gz. Likewise, a pre-compiled binary for Windows is available here: sqlite-3_3_7.zip.

I’ve got a ticket open on the SQLite3 trac about this (right here ); hopefully this will be recognized as an unacceptable change for a point release and will be reverted.

Capistrano mailing list

After getting all inspired by Kathy Sierra’s keynote at the RailsConf last week, and reflecting on the requests I’ve received for a Capistrano-specific mailing list, I decided it was time to do something about it.

(Btw, you can read more about Capistrano in the manual.)

So, I started a mailing list for Capistrano. Currently, it is intended for any and all discussion related to Capistrano—sharing recipe files, relating success (or horror!) stories, posting patches, discussing tips and techniques, etc. So if you use Capistrano, or want to be using Capistrano, go ahead and sign up! You can join by sending an email to capistrano-subscribe@googlegroups.com, or by using the Google Groups web interface at http://groups.google.com/group/capistrano.

Let the good times roll!

David Heinemeier Hansson's RailsConf 2006 keynote now online

David’s RailsConf 2006 keynote, Discovering a World of Resources on Rails, is now online.

In this talk he announced the new ActiveResource project, for consuming REST web services and evangelized his new infatuation with regimenting his domain into simple CRUD operations.

You can get the slides and a slice of David’s point of view on all this, over at LoudThinking.

For those twitching at the flash video player, Ruby Central will be making the footage available in the future in an unflashy format.

Remember CRC Cards?

In 1988, Ward Cunningham (yes, that Ward Cunningham) came up with an idea to use index cards as a tool for object-oriented design. I was working for Kent Beck at Apple at the time, so I got to hear Ward describe his idea over speakerphone in Kent's office. Ward and Kent presented a paper on CRC cards at the OOPSLA conference the next year, and suddenly they were all the rage. Some companies even printed up branded CRC cards, which still makes me laugh.

Take an index card. (3x5 or 4x6 are good sizes, but any larger than that and they become too unwieldy to move around.) Write the name of a class across the top. Draw a vertical line separating the rest of the card into uneven halves - the left half should take up about 2/3 of the width. On the left side write the responsibilities of the class. On the right side write the objects or classes of objects that objects of this class collaborate with. That's the basics right there. Once you have cards representing several classes, you can arrange the cards to explore object interactions and discover new responsibilities and collaborations.

While CRC cards can be used solo, where they really shine are during collaborative design. It's easy for one person to move a card around to show others what they mean. Since cards move independently, two people can be writing on different cards at the same time. It makes for a lightweight yet effective group design process. It's also a decent way to describe a design.

CRC cards also play well with the Rails mindset where constraints are empowering. Cards are small, so you can't write so much on them that they become too complex to understand. Limited space keeps you focused on the important stuff. And since cards are easy to make, they are also easy to throw away - no investment equals no pain. Don't like what's on a card? Just tear it up and start over.

A good way to start with CRC cards is to use them to document an existing design. That way you don't have to deal with creating a design while learning a new tool at the same time. Then you might use them to modify or expand the design for existing software. Once you are warmed up with them you can take them for a spin on a brand new design.

My brief explanation hardly does the topic justice. Read Ward and Kent's paper, explore the original wiki for CRC card articles, and of course google around for yet more information.

Rails System Back on Track

Hopefully you didn’t notice, but I’ve been very busy this weekend. I finally took the plunge and got all the Rails applications that run on this machine up to snuff. All applications hosted here are now deployed with Capistrano, run under Mongrel (using the mongrel_cluster plugin) with requests being handled by Apache 2.2 and proxied to Mongrel by the mod_proxy_balancer module. So far it seems to be working great. You’ll notice that the Wiki, the Manuals and the weblog are all much zippier. The machine seems to be much happier as well.

And, to cap off all this fun, the weblog has been migrated from Typo to Mephisto, the blog/CMS engine from Rails Core member Rick Olson. The feed has also been moved to FeedBurner and redirects have been put in place so your reader should make the change automatically. If not, just subscribe here.

Thanks to everyone who helped me check and test things! Trac improvements are next on my list. Stay tuned!

Wellington Rails User's Group

Tomek Piatek and others have started Well Railed, the Rails User’s Group in Wellington, NZ. The first meeting will be on the 30th May at 6:30-ish at Hell Pizza in Bond Street. So come along for some pizza and beers to meet the local rails crowd.

You can follow group discussions on-line on Google Groups page.

Mostly good news about freezing, Typo, and Rails 1.1.1

Let’s start with the good news about freezing and Rails 1.1.1:

  • New applications will automatically bind to the gem version of Rails they were created with using a RAILS_GEM_VERSION constant in config/environment.rb
  • You can now file freeze a new application with rails myapp --freeze, such that it doesn’t even depend on the proper gems being available
  • You can now also freeze Rails from a tag using like rake rails:freeze:edge TAG=rel_1-1-0

So lots of great options to prevent that your application will ever get bitten by an external upgrade again.

In addition, we’re including a handful of fixes for various other regressions. So the vast majority of all applications should Just Work after the upgrade (but of course, you should always test before deploying an update). You may still have plugins that are incompatible, but most plugin authors should have a 1.1.x compatible version available by then.

If you have Typo 2.6.0, you must freeze

Now to the slightly less exciting news: Typo 2.6.0 is not going to work with Rails 1.1.1. The Typo team has been working on a new release that’ll be 1.1.x compatible and I’ve been imploring them to release a 2.6.1 that just includes Rails 1.0 in vendor/rails. But a vanilla 2.6.0 install with not work with 1.1.×.

That sounds worse than it is, because the remedy is really simple: Checkout Rails 1.0 into vendor/rails and Typo won’t give a hoot when your host inevitably decides to upgrade to Rails 1.1.×. The easiest and most fault-tolerant way of doing that is through svn. Go to the root of your Typo application and run:

svn export http://dev.rubyonrails.org/svn/rails/tags/rel_1-0-0 vendor/rails

Then restart your Typo and you’re now safe from gem updates. This antidote is a good one for any application you have deployed on a shared host. It’s not safe, and will never be safe, to just float against the latest Rails on a shared host. Always make sure you’re playing it cool and do a freeze.

Regardless of the factors, the core team apologizes for any inconvenience caused by the 1.1.0 release. While it worked for the vast majority of people, we should indeed had made sure to get feedback from the Typo guys before pushing out the release. Then at least we could have warned people in advance that 2.6.0 was simply not going to jive.

Hopefully this ordeal will motivate more people to help test future release candidates. We’ll do ours to help by extending the testing period and we’ll be grateful if you would do yours by testing and reporting any troubles found.

Rails 1.1.1 early this week

If you want to get into the good spirit right away, you can help test the trunk, which is aiming to become Rails 1.1.1 early this week. We still lack a few fixes, but what’s there should already deal with almost all of the issues. To be fail safe, remove vendor/rails (if you have it), and run:

svn export http://dev.rubyonrails.org/svn/rails/trunk vendor/rails

Thanks everyone!

Freeze is cool, so freeze for goodness sake

Many shared hosts did a quick dance up and down at the release of Rails 1.1 because a large number of their customers were floating off the gems, which meant that upgrading the gems automatically updated all the applications. Some applications couldn’t handle the upgrade (most notably Typo), so they broke. And the customers were none too happy and complained to the hosts: “Why oh why, dear host, would you upgrade and break my application?”

This is obviously bad. But nothing is so bad that you can’t learn from it. And this is a wonderful opportunity to learn that You Should Freeze Rails For Any Application In Production. Sure, we talked about that back in December, but talk is cheap (and often overheard).

So here follows a lifted finger and a promise. The lifted finger first:

If thou bless thee world with an application of open source, thou must ship it with the version of Rails that thou knowest it to work with in vendor/rails.

Here’s one counter argument that will not allow you to evade this finger: “But it’ll make my app X% larger to download”. In this day of age, nobody cares. Time is more valuable than disk space and saving hair-pulling aggravation over broken dependencies is infinitely more valuable than disk space.

Then the promise: The next version of Rails will by default extract the version of Rails it was created with into vendor/rails. This will get everyone into the Christmas spirit of being good on day one. It’ll be natural to desire less dependencies and you will soon froth at the notion of a shared host controlling the destiny of your application by choosing to update some gems. And you will be happy and content.

2.5 Million Requests

In case you were wondering if Rails can scale: Eric Hodel reports that the Robot Co-op served 2,587,240 requests through their Rails applications last Saturday.

Do you have any scalability stories to share?

Rick Olson joins the Rails core

Rick Olson aka technoweenie has been granted the rank of core and will join the new 12-strong group of developers with commit rights to the Rails source.

Rick has long been a prominent figure in the Rails community with ton of great plugins to his name, but it has been his work on Rails 1.1 that made us realize that he was an obvious fit.

From the upgraded calculations, to enumeration support for RJS, to his work on eager loading, and a ton of other minor issues, Rick has shown strong knowledge and ability across the code base. When Rails 1.1 is released shortly, you’ll be using a lot of Rick’s code.

So congratulations, Rick! You’ve joined the exclusive club of Rails core committers.

Using Ruby on Rails on Mac OS X at the Apple Developer Connection

The Apple Developer Connection has a nice Ruby on Rails tutorial called Using Ruby on Rails for Web Development on Mac OS X. As the title suggests, it is aimed at getting OS X users off the ground with Rails.

The Apple Developer Connection doesn’t supply any attribution for their articles, but this one was written by none other than Mike Clark, who along with Dave Thomas runs the always-sold-out Pragmatic Studio series of Ruby on Rails and Ajax training.

Cheers to Mike for taking the time out of his busy schedule to write up a great tutorial.

Pick a license for your Rails additions

Rails is released under MIT and only includes packages that are either directly under MIT or were re-licensed specifically for Rails under MIT. But not all plugins, generators, engines, or other types of additions are as explicitly clear as to what license they’re released under. It would be great if they were.

So, if you’re the creator of a Rails addition of any kind, please do pick a license and include it with your software. I recommend MIT.

RailsConf 2006: June 22-25, Chicago

The long-rumoured RailsConf is a reality. We’ve just launched the website and finally announced the dates and place. It’s going down in the lovely Chicago Summer on June 22nd through 25th. There are a lot of details yet to be determined, but Dave Thomas and myself are already lined up to keynote.

Further details will soon trickle in. Such as how to propose a talk and naturally how to sign up for the event. We’re most likely going to cap the attendance to a hard 400. So if you don’t want to miss RailsConf like a lot of people missed RubyConf (which was capped at 200), you’d probably do be well-advised to stay alert on the opening of registrations.

Expect the registration fee to be around $350-400. So if you need to start saving, do that.

Why engines and components are not evil but distracting

I’ve been following the enthusiasm for engines, components, and bigger plugins from the sidelines for a while now. It’s a subject of very mixed emotions. On the one hand, I’m really glad to see that people get so excited and start dreaming of bigger and better things. That’s passion in the works and its great.

On the other hand, I think these developments are basically another name for high-level components. And you all know how I feel about those. The short summary is that high-level components are a mirage: By the time they become interesting, their fitting will require more work than creating something from scratch.

But I start getting really high eyebrows when I hear of “engines that depend on other engines that can be swapped out with yet another engine”. Even plugin dependencies are dangerously close to something I would consider unfit for Rails. Simply because it encourages a style of development that I find unhealthy.

So this is not a slam against the technical merits or implementation of either engines or anything else in the same boat. It’s a concern that they will distract people, that they will appear as needed, and in turn, that they will take the debacle that was Salted Hash Login to a new standardized level.

Rails is all about making the simple things so easy that you need not abstract them. It’s about making the creation of logins, of access control, of content management, of all these business logic components so very easy that you will treasure the application-specific solutions of your own rather than long for The One True Login System.

So what am I saying? That engines should be stopped? Of course not. But I am saying that Rails will continue to send a signal with what’s included in the core that this is a sideshow project. It satisfies some needs for some people and that’s great. But the goal of Rails is to create a world where they are neither needed or strongly desired. Obviously, we are not quite there yet.

One way of getting there is to do a better job of educating new comers in common patterns. Answer the question “if engines and components are not the way, then show me how!”. So this is a call to all those experts out there. Help us spread the good patterns. Make videos, write tutorials, help newbies on #rubyonrails, answer requests on the mailing list.

And if you have a great idea for an engine, or a high-level component in general, think about this: Is there a way I could abstract a smaller slice of functionality as an independent plugin and then release that alongside a pattern that described how to use it like the component would have done all in software? More often than not, I think you could find this to be true.

Note: James Adam, the creator of the engines approach, has a great post on the mailing list for how he uses engines internally at his company. That’s perfectly cool use. The trouble with high-level components are solely related to making them generic.

Inviting Rails extenders to join the rails-core ML

If you’re working on patches for Rails, you should sign up for the rails-core mailing list. It’s much more low-traffic than the regular Rails mailing list and designated exclusively for discussions on extending Rails.

So if you have any questions about a patch you’re working on or have completed, this is the place to join. If you have questions of the usage of Rails, announcements, or any of the other jazz, please do keep it on the regular list.

Tracking plugins temporarily on the wiki

One of the more exciting new community features in Rails 0.14 is the plugin system. It drastically lowers the barrier for people that wants to distribute their changes to the framework and for those that want to use said changes. But we haven’t yet arrived at a conclusion on how to track and aggregate these plugins, so far now the good ol’ wiki will do. Checkout the Plugins page on the Rails wiki.

Dan Peterson is the new Rails sysadmin, fixes Trac

Our trusty Rails server Wrath was generating cruft and crust faster than you could say we-have-no-sysadmin, so at RubyConf we decided to remedy the situation and ask for help. Dan Peterson stepped up to the plate and is now officially the new Rails systems administrator. Welcome on board, mate!

And wasting little time, he has already cleaned a few rough corners for performance and, more importantly, upgraded and fixed Trac — the software that runs dev.rubyonrails.com. So no more timeouts, better performance, more features.

Podcasting all over the Rails

Scott Barron has taken Ruby on Rails on the air. Listen to the Ruby on Rails Podcast:

On the show we will delve deep into the warped psyches of the members of the Rails core team. We’ll talk about news related to Rails and the web devlopment communities in general. We’ll talk about tips and tricks you can use to to write better Rails applications, and become a better person.

Mike Rundle redesigns the header

Mike Rundle didn’t like the header of this site and with the alternative he came up with, we don’t blame him. The new look is decidedly nicer than boring black-on-yellow. So it’s accepted and integrated. Much nicer. Thanks, Mike!

Are you running the final version of Ruby 1.8.2?

A fair number of people have been having problems with Rails 0.13 because it relies on behavior present in the final version of Ruby 1.8.2. That’s the one released on December 25th, 2004. You can check if you have the proper version by doing ruby -v, which should return “ruby 1.8.2 (2004-12-25)”.

If it doesn’t, you need to upgrade. Releases from before December 25th are beta releases that are not ensure to be compatible with Rails. In particular, there’s the session exception like:

NoMethodError: undefined method `new_session' for #CGI::Session:0x259f6c0

…or Proc errors like this:

/gems/actionpack-1.9.0/lib/action_controller/
code_generation.rb:68:in `dup': allocator undefined for Proc (NoMethodError)

Both tell, tell signs that your Ruby beta has exceeded its expiration date.

Feeling the slowdown blues after going 0.13?

It’s somewhat ironic that we heralded Rails 0.13 as being a great move forward for the performance of Rails and then half the threads on the mailing list is about “Rails is sLOOOW!”. We’ve found the problems, though.

The first was with the MySQL/Ruby bindings, which called GC.start whenever MySQL#free was called. And we just put in MySQL#free in 0.13 to improve things after each select of rows. This caused the garbage collector to run every time you selected something. Doh!

The C-bindings didn’t have this problem, so it wasn’t discovered by the core team right away, and that was posed as the solution on the mailing list. Unfortunately, it’s not necessarily trivial to compile native bindings on all platforms (notably Windows), so having fast Ruby bindings was indeed important. They’re fast again, but if you upgraded to the C-bindings you can be happy that you’re even faster.

The second problem was that we plugged a big memory leak in development mode, but doing so caused a total of 8 runs through the so-called ObjectSpace after each action (basically iterating over all objects in the interpreter 8 times, eeks!). On big applications this could take a while. On Basecamp it took 2 seconds. After the fix went in where we just traverse the ObjectSpace once, it’s down to a comfortable 0.2 seconds (which is about 0.17 faster than it even was before the memory leak fix!).

Thus, Rails 0.13.1 is near forth coming. As in this weekend. If you cannot wait, and we certainly won’t blame you, there are new beta gems that consist purely of bug fixes. Upgrade with gem install rails --source http://gems.rubyonrails.org --include-dependencies.

Nicholas Seckar makes the commit team!

He rose through the ranks of contributors quickly with the great implementation of Routes, but has since put his mark on so much more. Including the dependency management system and lots of other tricky parts of Rails. In the just released 0.13, he was single-handedly responsible for about a quarter of the patches going in.

Thus, I got sick of rarely-to-never having a finger to put on his patches and merely serving as a commit lackey. It’s due time that he was granted the ability to do so himself.

Please do welcome Nicholas Seckar of Toronto, Canada as the latest member of the commit team. He joins Jeremy Kemper, Jamis Buck, and myself.

Can you believe that this guy actually has availability in his calendar to take on new projects? It’s true. So if you’re looking to hire a freelancer that really knows Rails, this is a great opportunity. Write him at nseckar at gmail dot com.

Jamis and Jeremy bestowed with commit rights

While we’ve had restricted parts of the Rails repository available for committing by others than yours truly (Leon on AWS, Sam on prototype), the trunk has been closely guarded until this point. But it’s time to share the load, if only a little. So I hereby announce that Jamis Buck (minam) and Jeremy Kemper (bitsweat) has been bestowed with commit rights.

Jamis is already the main driver of Action Mailer, my follow programmer at 37signals, and the creator of lots of Ruby open source software. He was also one of the very first people to ever submit a patch to Rails as he did the first implementation of has_and_belongs_to_many. He is indeed one of the best programmers I know.

Jeremy has proved his invaluable worth for Rails time and again. Next to myself, he has by far the most patches accepted in the trunk. Which often has included extensive improvements to the health of the framework in form of refactorings and expanded test coverage. Jeremy has also just accepted a full-time position with CD Baby, so he’ll continue to be working all Rails, all the time.

Much congratulations to both of them. It’s a little tough relinquishing the keys to treasury, but it’s time, and I don’t think I could have picked a better pair to inaugurate the expansion of the commit group.

Moved to a brand new dedicated server

The terror reign of intermittent MySQL errors has ended. We moved to a brand new dedicated server this morning thanks once again to the kind crew at TextDrive.

UPDATE: The wiki is offline for a bit today as the server will be reconfigured to allow larger memory allocations.

Reasonable expectations on a $12 plan

It’s great to see so many Railers sign up with TextDrive. They’re a great host and I’m happy to be associated with them. But unfortunately, it appears that there’s some mismatch in expectations around what you get for a $12 plan.

What you do get is a slice of very reasonable specs on some great machines. What you don’t get is your personal system administrators. You should have your shit together before pushing it to TextDrive. Develop on your local machine, push to TextDrive when it works.

As explained, TextDrive is a shared host. That means its somewhat like a community park where everyone is responsible for cleaning up after their visit and behave with good manners. Think of your application as a park goer. Make sure its recently well-behaved by not taxing everyone else with needlessly sloppy queries or tough computations on every request.

Most importantly, though, is to be mindful about your support requests. As nice as it would be, the TextDrive system administrators can’t be part of your development effort debugging your application. They’re there in case the system as such is broke. So just like programmers should be careful before blaming the operating system for their program troubles, you should be careful before blaming TextDrive for yours.

TextDrive is a marvelous service. You get SSH, Rails, lighttpd, FastCGI, MySQL, SVN, PostgreSQL, and so much more for twelve dollars a month. 12. On top of that, they’re taking half of the profit from that to help Rails. I’d hate to see such a resource go away because unreasonable support requests and sloppy apps.

Let’s avoid The Tragedy of The Commons. Thanks.

Verifying encoding approach to Action Mailer

If you’re deep into all the RFCs on email, we’d like your help ensuring that the latest approach to encoding with Action Mailer is sound. We’re going for an approach where encoding to subjects and headers are only applied if necessary. Please do have a look at ticket #955.

IE5/5.5 compatibility wizard wanted

Do you know how to make Javascript work for IE5/5.5? We’d love to get some help making the new Javascript helpers as compatible as possible. So if you got the chops, please take a look at making sure that the prototype.js library and the associated helpers work on IE5/5.5. For more information, get in touch with me (nextangle) on #rubyonrails.

Joyent seeks 4 developers with Rails experience

David Young from the San Francisco start-up Joyent are looking for 4 developers with Rails experience:

We’re looking for four exceptional people, they should have deep experience writing good GUI applications and/or understand the integration of various open-source server products including mail, calendar, directory, samba, and rails. Some experience with Mozilla’s XUL is a big plus (it’s a bigger plus if they understand why XUL isn’t a complete solution). We will provide relocation (and visa, etc. sponsorship) assistance, but relocation is not necessary for the first phase. If desired, relocation would happen in the September, 2005 timeframe.

If you’re interested, get in touch with david at joyent dot com.

Beyond the 10,000th gem install of Rails

All the latest attention have spurred downloads of Rails to new heights and we just surpassed the 10,000th gem installation of Rails (not counting all the beta gem installs or svn:external setups)! On top of that, we have some five thousand downloads of the zip/tgz version for a total of around 15K in combined downloads. This encompasses all versions, so naturally there’s plenty of overlap and this doesn’t translate into 15K people working with the Rails (yet!).

So on this occassion, I’d like to take this opportunity to thank instead of berate other projects that have proven influential to the development of Rails.

Thanks to PHP for getting me into programming and teaching me how much immediacy matters. Thanks to Smalltalk for being an inspiration so far ahead in many areas where we’re still scrambling to catch up. Thanks to Java for being the birth place of many great ideas in frameworks such as Struts, Tiles, WebWork, Hibernate, and more.

Most importantly, of course, thanks to Matz and the Ruby community for proving such fertile grounds for creativity and achievement.

And now, let’s all hold hands and sing songs about spreading love, not hate.

Welcome Slashdotters!

We’ve been part of a Slashdot posting once before, but this is the first time that Rails is actually the primary topic of one. So a proper welcome to all the Slashdotters flowing in from the article about Curt Hibbs’ great new Rails tutorial on O’Reilly’s ONLamp.

Hopefully we’ll survive the onslaught and a few will stick around!

Having problems running tests under 1.8.2?

Unfortuntately, the snapshot of test/unit included in Ruby 1.8.2 is broken for use with Rake. Steps are being made to remedy the situation, but in the mean while, you can apply the fix needed to the Ruby source itself. It’s a two-line change, but pretty important two lines.

In order to apply this fix, you need to:

cd /usr/local/lib/ruby/1.8

(or where ever you have Ruby installed) and do:

patch -p0 < /path/to/fix/dir.rb.cleanup.patch

Hopefully a more permanent solution can be found in Rake or Ruby shortly.

Have a codefest and collect cash from RubyCentral

Chad Fowler just reminded the Ruby community that free money is up for grabs if you have a cool idea for a codefest. There’s a total of $1,500 in the pot and $500 max on a per-project basis. Chad suggests a couple of ideas that could get a grant:

  • Ruby Subversion bindings
  • A nice bug tracker in Rails
  • Something that simplifies the open source ruby library release process, integrating RAA, RubyForge, ruby-talk, Freshmeat, and RubyGems

So what are you waiting for? Get the band together and apply for the Ruby Codefest Grant Program.

43things in 5,204 lines of Ruby on Rails

Eric Hodel was so kind as to show me the output of rake stats on 43things and it revealed that it took 5,204 lines of Ruby to create the current version. That’s pretty darn amazing considering they’re not even taking full advantage of the huge array of improvements in Rails 0.9.x and that the team consists of three out of four programmers new to Ruby.

Another round of applauds to the team at The Robot Co-op for creating such an interesting application in so few lines. Kudos!

How the redesign of the website came to be

Jakob Skjerning is sharing some additional details on what we went through creating the new uniform look for Ruby on Rails:

The project was pretty interesting since we wanted to give the existing parts of the Rails web presence a uniform look’n’feel, mixing Instiki with Trac with RDoc with new additions WordPress and Hierarki. That’s 3 different scripting languages and 5 different ways of templating.

Rake 0.4.14 includes fix for Ruby 1.8.2

Jim Weirich has just released Rake 0.4.14 that includes the fix by Dave Halliday to cure test suite runnings with Ruby 1.8.2. You’ll want to grab this right away in preparation for your forthcoming upgrade to the latest Ruby release. And what better way to do that than with gem install rake. Thanks to Dave for the fix and Jim for the expedient release!

Rails logo remixed by Olivier Hericord

Despite my initial resistance, Olivier Hericord pressed on and prevailed — against my own odds — to produce a remixed version of the new logo that was greeted by the majority of the community as an improvement. And I concur. The remix signals less rigidness and more fun than the original — two important properties to Rails development.

Original    vs    Remix

This process also proved that patches are not just for software. Once you share the source, improvements are bound to occur. That’s another reason that I’m welcoming the remix. The community protested, the community acted, the community celebrated change, and now, hopefully, the community moved on.

(Just in case you’re not quite ready for the last step: Source for the remix in AI format)

Celebrating 219 applied patches since 0.7

Rails has absorbed ~219 patches since the ticketing went Trac around the release of Rails 0.7. That’s almost three patches applied per day. Quite the barn raising. Seems like we’re keeping the pace too with more than 20 patches awaiting to be applied from over the last week. And I even did apply a few. And some of these “patches” are huge things like a DB2 and a finished SQL Server adapter.

The open source is working.

Splitting off the research patches

I’ve introduced the new [RESEARCH] prefix to ticket summaries in addition to the existing [PATCH]. By applying the [RESEARCH] prefix, you’re sharing a patch with the world that either needs additional testing, suggestions, or development before being ready for trunk inclusion. We have a new report as well to show the research patches of which there are currently five.

Variations on a railed theme

I’ve received quite a few alternative suggestions for a logo since we unveiled the direction Hicks was taking the identity. They all discarded the work that was going on and went in another direction entirely. So that wasn’t going to fly. What could fly, though, is a variation on the theme already established. That’s what hangon have done after he realized that being rude weren’t getting him anywhere:

What a much more productive use of your discontent. I actually quite like this variation. What do you think?

Rails celebrates more than 10,000 downloads

Across all versions and distributions forms, Rails have now rounded 10,000 downloads since the first version was released just five months ago. That’s an incredible achievement for a new framework to reach in such a short period of time, but if things go as they should, we should be celebrating 100,000 downloads in another five months (world domination doesn’t occur by modesty, now does it ;)).

Thanks to all the contributors who helped make Rails a desirable package. Thanks to all the companies that took a chance with a new kind of productivity. Thanks to all the many users who made it interesting to release new versions.

And of course thanks to the live community hanging out on #rubyonrails and rails@lists.rubyonrails.org. Keeping the energy at a staggering high day by day.

Extracting missing content from wiki backups

The Rails wiki has taken a few beatings, but now it’s running in high class with proper rollback protection, so we should now have a stable host to fill with content. So what better place to start than to extract all the missing content from the two backups we have that might contain missing pages:

The easiest way to figure out what’s missing is to go look for your own content. If you miss some of that, then please do retrieve it from one of the backups. But that shouldn’t hold enterprising individuals back that want to help with the restoration. Dig in!

Open sourcing the Rails logo

While the core shape, expression, and approach of the new Rails logo has been decided, there’s still room for hunting devils in details. So if you feel that the current logo suffers from any number of imperfections, here’s your chance to put your abilities where your mouth is. Here’s the logo in all its three forms:

The source (in form of AI and EPS): Gradients, Colour, B/W

Ruby on Rails has its web presence overhauled

Welcome to the bling-spanking new web presence for Ruby on Rails. We’ve gathered all the fledging properties under one design and bound them all in slickness. In the same breath, we’re restoring the lands of Loud Thinking to more of a personal weblog for David Heinemeier Hansson and assigning the responsibility of lavish Rails praise and tracking to this entity.

Until we’ve had some time to move it all around properly, the SVN repository remains at http://dev.rubyonrails.org/svn/rails while the rest of the site has home at .com. We’ll get it all sorted out eventually.