Simple behind-the-scenes API authentication with OAuth2

Like many others I’ve been spending a lot of time with OAuth2 lately. The single-sign-on system we’ve built at GDS acts as a very simple oauth provider for our other apps (effectively just joining up the oauth2-provider and devise gems), and we’re probably going to be extending our API adapter code so that we can use it for those apps whose APIs need authentication. What I’d not explored for a while was the simplest way to implement app-to-app oauth where there’s no UI for user interaction so over the New Year break I pulled something together for another project. It’s all pretty straightforward but not very well documented so I thought I’d better share. ...

Continuing to consider Drupal

A little over three years ago I wrote a piece entitled " Assessing Drupal as a Rails developer." In it I attempted to lay out a few of the reasons why I found Ruby on Rails a much more comfortable platform for building web applications than Drupal. Over the intervening years, Drupal has continued to grow in popularity, and recently we’ve seen the release of Drupal 7. Rails has seen some radical changes with the release of its third major version, but I must confess I’ve no idea what’s happened with its profile and adoption rate. ...

Adding actions to Devise controllers

Adding Actions to Devise Controllers It wasn’t the most fun I could imagine having during a “holiday season” but while holed up in Chicagoland over Christmas I spent a couple of days porting a few of my older Rails apps to use a more up to date stack: Rails 3, Devise, Inherited Resources, Formtastic, etc. The idea is that if the apps are on a stack I use every day, I’ll spend less of my time reloading old tools into my head when the inevitable tweaks are required. We’ll see how that goes. ...

Rails 3 Theme Support

A few months back I set out to port theme_support (my rails plugin to allow one app to serve different views under various conditions) to Rails 3. I got some basics working, but realised along the way that it was well overdue for a complete rewrite. And then I got busy with projects that didn’t use theme_support and the rewrite was left lingering. With Rails 3’s official release a few weeks back I began getting a few requests for an updated version. Without time to do the plugin justice, I suggested people fork the project and submit patches. I’m very pleased to say that Lucas Florio took that and ran with it. The result is a new gem: themes_for_rails. ...

Delayed Job dying silently

I’ve just completed migrating a client site from BackgrounDRb to delayed_job (which is a huge relief on several levels). I had hoped to complete the process this morning, but the delayed_job process kept dying on me without any apparent explanation in the usual logs. Thankfully the RPM log in my app turned out to be capturing one vital detail – the MySQL server had “gone away”, Armed with that knowledge I was able to find this thread on github and from that Brandon’s pointer to the ‘reconnect’ option in database.yml. Setting that appears to have solved that last lingering problem. ...

Character encodings, Rails 3 and Ruby 1.9.2

In a lengthy blog post detailing many of the intricacies and some of the politics relating to character encodings in Ruby, Yehuda Katz has a few paragraphs that left me more than a little excited: The most common scenario where you can see this issue is when the user pastes in content from Microsoft Word, and it makes it into the database and back out again as gibberish. After a lot of research, I have discovered several hacks that, together, should completely solve this problem. I am still testing the solution, but I believe we should be able to completely solve this problem in Rails. By Rails 3.0 final, Rails application should be able to reliably assume that POSTed form data comes in as UTF-8. ...

has_many_polymorphs and Rails 3

I’m gradually porting a number of my older Rails apps over to Rails 3. The main motivation is a chance to really put the new version through its paces, get a better sense of how it’s working, where plugins are at, etc; but it’s also rather nice to get some of the performance improvements and cleaner code along the way. Catapult relies on Evan Weaver’s has_many_polymorphs plugin quite extensively so it was important to be have a Rails 3 compatible version. I couldn’t find any evidence that anyone else was working on it, so I’ve forked the github project and made a few alterations. I’ve set it up to work as a gem (so I can pull in the latest version using bundler) and adjusted to fit the new rails initialization process. It’s rather hacky, but it’s working for me so far. ...

Asset bundling in Rails

I stumbled across James Herdman’s piece on asset bundling in rails earlier this week. I’d always presumed you could do this but never got round to investigating as very few of my projects load in very large numbers of JS/CSS assets. In the end it was quite timely as I’ve been trying to reduce the footprint of an app I’ve recently inherited that is using far too many plugins. With this technique it was very straightforward to remove the asset_packager library. Now, what else can I eliminate…? ...

Faster Rails development with bundler and rvm

If you’re anything like me, you’ve found the rails server and console taking longer and longer to launch lately. Even switching to Rails 3 for most active projects hasn’t really helped. But I finally found a solution a couple of weeks ago. I found it reading Mikel Lindsaar’s Bundle Me Some Sanity where he outlines the way that bundler coupled with rvm allows a rather different and much cleaner way to manage gems in a ruby application. ...

More notes from a Rails 3.0pre upgrade

This is a follow-on from my piece on how I got the (development version of) Catapult Magazine up and running with Rails 3.0pre. If you haven’t already done so, I’d recommend you read that first. Catapult makes use of the permalink_fu plugin which fails in Rails 3. It fails because of a reliance on the evaluate_attribute_method method which no longer exists in version 3. I’ve temporarily worked around that by replacing it with class_eval, but lately I’ve been using friendly_id a lot more and I suspect I’ll be focussing on porting to that if it works cleanly in Rails 3. ...