14 Jun 2012
Rails 2.3.14 on Ruby 1.9.3
Rails 2 hasn’t been maintained for quite a while, and it last officially supported Ruby 1.9.1. I was working on getting an old Rails 2 app upgraded to Rails 3 and discovered something frustrating: Rails 2.3.14 don’t boot under Ruby 1.9.3 unless every single controller has a helper class defined in a helper file. I didn’t want to sit around creating 60 helper files, so I did the expedient thing, patching the app’s boot.rb
file to not raise exceptions on missing helper files.
It turned out to not be a terribly large amount of code, but here’s a diff just in case anyone else is upgrading a really old Rails app and runs into the same issue:
diff --git a/config/boot.rb b/config/boot.rb
index 69b1a51..2c979cf 100644
--- a/config/boot.rb
+++ b/config/boot.rb
@@ -61,12 +61,30 @@ module Rails
require 'initializer'
end
+ def monkeypatch_helpers
+ require "active_support"
+ require 'action_controller/helpers'
+ ActionController::Helpers::ClassMethods.send(:define_method, :inherited_with_helper) do |child|
+ inherited_without_helper(child)
+
+ begin
+ child.master_helper_module = Module.new
+ child.master_helper_module.__send__ :include, master_helper_module
+ child.__send__ :default_helper_module!
+ rescue MissingSourceFile => e
+ raise unless e.is_missing?("helpers/#{child.controller_path}_helper")
+ rescue LoadError
+ end
+ end
+ end
+
def load_rails_gem
if version = self.class.gem_version
gem 'rails', version
else
gem 'rails'
end
+ monkeypatch_helpers
rescue Gem::LoadError => load_error
$stderr.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.)
exit 1
I’ve also posted it as a gist if that’s more up your alley.