Migrate or revert only some migrations

Selective Rails migrations can be moved up, down, redone, or targeted by version instead of processing the full sequence.

Aliases for routes

The following initializer provides an :alias => "my_route_name" option to restful routes in your route.rb. This simply makes the same route also available under a different ..._path / ..._url helpers.

For example,

map.resources :notes, :alias => :snippets

Gives you

notes_path, notes_url, new_note_path... #as always
snippets_path, snippets_url, new_snippet_path... #from the alias

Put this into an initializer:

Git: "Interactive reverts"

Reverting only selected changes from one or more commits can be done interactively by staging parts of the diff and discarding the rest.

Git diff a file with another revision (or branch)

Compare one file against another commit or branch to inspect changes without reviewing the entire repository.

Install a specific version of a gem

Pinning a gem version avoids accidental upgrades and keeps installs reproducible. gem install supports exact version selection with --version or -v.

Prevent Bundler from downloading the internet

As a user of Bundler you have spent significant time looking at this message:

Fetching source index for http://rubygems.org/

To make Bundler skip this index update and only use installed gems, you can use the --local option:

bundle install --local

Unfortunately this does not work with bundle update.

It is said that Bundler 1.1 will use a feature of Rubygems.org that allows partial index updates. Hopefully the wh...

Generate a Unicode nonbreaking space in Ruby

Regular spaces and non-breaking spaces look alike; a small Ruby helper can return the Unicode nonbreaking space instead of using HTML entities or raw character codes.

Defining and using sub-classes with modularity

Nested classes in modular traits can lose their original namespace, breaking references from class methods and other code. Using class self::Bar preserves the enclosing class name.

Install gems for all bundled projects

Batch-installs Ruby gems for every project in a directory, speeding up setup on a new system; native extensions still fail without required system dependencies.

Select a random table row with ActiveRecord

Randomly selecting a database row with ActiveRecord is possible, but ORDER BY RAND() scales poorly and can overload large tables.

Test that a CSS selector is present with Cucumber

Cucumber step for checking whether a CSS selector is present or absent on a page with Capybara or Webrat.

Bash Cheat Sheet (standard Emacs mode)

Handy Bash key bindings and history shortcuts reduce typing and speed up command-line editing, repetition, and reuse of previous arguments.

Rails 3 Remote Links and Forms: A Definitive Guide

Thanks to habits engrained by Rails 2’s link_to_remote and remote_form_for, we expect that Rails 3 would also handle the AJAX response for our remote links and forms. But it doesn’t; it leaves that for you.

Share your Internet connection under Ubuntu

Turn an Ubuntu PC into a simple internet gateway for another computer using a second network interface and connection sharing.

Terminus: a client-side Capybara driver

Terminus is a Capybara driver where most of the driver functions are implemented in client-side JavaScript. It lets you script any browser on any machine using the Capybara API, without any browser plugins or extensions.

Standalone Cucumber Test Suite

Sometimes you inherit a non Rails or non Rack based web app such as PHP, Perl, Java / JEE, etc. I like using cucumber for functional testing so I put together this project structure to use as a starting point for testing non Ruby web based applications.

Show a MySQL table's charset, collation and engine

SHOW CREATE TABLE reveals a table’s storage engine plus character set and collation, useful when comparing schemas or diagnosing encoding issues.

Request a non-HTML format in controller specs

Controller specs can exercise non-HTML responses such as PDF, Excel, XML or JSON by setting :format or the HTTP_ACCEPT header. The format value must be a String, not a Symbol.

Get the current layout's name in a view or partial

Retrieve the active view layout name, including its path, from response.layout; File.basename returns just the layout name when the full path is unnecessary.

Undocumented :inverse_of option for ActiveRecord associations

You can now add an :inverse_of option to has_one, has_many and belongs_to associations.... Without :inverse_of m and f.man would be different instances of the same object (f.man being pulled from the database again). With these new :inverse_of options m and f.man are the same in memory instance.

Enable or disable Gnome desktop icons

Desktop icons can distract during presentations; GNOME/Nautilus can hide or show them through the desktop preferences setting.

Fix LoadError with Rails 3 applications on Passenger

After switching to Rails 3 you may get a LoadError with the following message when trying to use your application via passenger:
no such file to load -- dispatcher

Your Passenger version is most likely out of date.

Update the gem, then install the apache module again:
sudo gem install passenger
sudo passenger-install-apache2-module

Follow any instructions. Update your /etc/apache2/httpd.conf with the lines given at the end of the installation process to use the version you just installed.

Passenger ignores RailsEnv directive for Rails 3 applications

You might find that your Passenger ignores all RailsSomething directives in the vhost for your new Rails 3 application. The culprit is a file config.ru which makes Passenger consider your application a Rack (non-Rails) application.

To fix this you can either use RackEnv in lieu of RailsEnv (it works fine) or delete the config.ru. Unless you have a good reason to do so, go with RackEnv.