Skip to content

Commit

Permalink
Lock Mephisto to Rails 2.0.5 gem
Browse files Browse the repository at this point in the history
Mephisto is only compatible with Rails 2.0.  The latest security fix for
the 2.0 series is 2.0.5.  But many Rails developers will have Rails 2.2
installed on their systems.  So this patch locks Mephisto to an appropriate
version of the Rails gem, allowing it to run on systems with Rails 2.2
installed.

This patch also includes the changes applied by 'rake rails:update', minus
the Prototype JavaScript files which had been removed from the original
Mephisto.
  • Loading branch information
emk committed Dec 1, 2008
1 parent 14dc7e9 commit 8f41aa9
Show file tree
Hide file tree
Showing 4 changed files with 114 additions and 15 deletions.
117 changes: 103 additions & 14 deletions config/boot.rb
@@ -1,19 +1,108 @@
# Don't change this file. Configuration is done in config/environment.rb and config/environments/*.rb
# Don't change this file!
# Configure your app in config/environment.rb and config/environments/*.rb

unless defined?(RAILS_ROOT)
root_path = File.join(File.dirname(__FILE__), '..')
unless RUBY_PLATFORM =~ /mswin32/
require 'pathname'
root_path = Pathname.new(root_path).cleanpath(true).to_s
RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)

module Rails
class << self
def boot!
unless booted?
preinitialize
pick_boot.run
end
end

def booted?
defined? Rails::Initializer
end

def pick_boot
(vendor_rails? ? VendorBoot : GemBoot).new
end

def vendor_rails?
File.exist?("#{RAILS_ROOT}/vendor/rails")
end

def preinitialize
load(preinitializer_path) if File.exist?(preinitializer_path)
end

def preinitializer_path
"#{RAILS_ROOT}/config/preinitializer.rb"
end
end
RAILS_ROOT = root_path
end

if File.directory?("#{RAILS_ROOT}/vendor/rails")
require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
else
require 'rubygems'
require 'initializer'
class Boot
def run
load_initializer
Rails::Initializer.run(:set_load_path)
end
end

class VendorBoot < Boot
def load_initializer
require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
end
end

class GemBoot < Boot
def load_initializer
self.class.load_rubygems
load_rails_gem
require 'initializer'
end

def load_rails_gem
if version = self.class.gem_version
gem 'rails', version
else
gem 'rails'
end
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
end

class << self
def rubygems_version
Gem::RubyGemsVersion if defined? Gem::RubyGemsVersion
end

def gem_version
if defined? RAILS_GEM_VERSION
RAILS_GEM_VERSION
elsif ENV.include?('RAILS_GEM_VERSION')
ENV['RAILS_GEM_VERSION']
else
parse_gem_version(read_environment_rb)
end
end

def load_rubygems
require 'rubygems'

unless rubygems_version >= '0.9.4'
$stderr.puts %(Rails requires RubyGems >= 0.9.4 (you have #{rubygems_version}). Please `gem update --system` and try again.)
exit 1
end

rescue LoadError
$stderr.puts %(Rails requires RubyGems >= 0.9.4. Please install RubyGems and try again: http://rubygems.rubyforge.org)
exit 1
end

def parse_gem_version(text)
$1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/
end

private
def read_environment_rb
File.read("#{RAILS_ROOT}/config/environment.rb")
end
end
end
end

Rails::Initializer.run(:set_load_path)
# All that for this:
Rails.boot!
6 changes: 5 additions & 1 deletion config/environment.rb
Expand Up @@ -8,6 +8,10 @@
#require 'ruby-debug'
#Debugger.start

# Mephisto only works with Rails 2.0 right now, so lock it to 2.0.5, which
# has the latest set of security fixes for 2.0.
RAILS_GEM_VERSION = '2.0.5' unless defined? RAILS_GEM_VERSION

# Bootstrap the Rails environment, frameworks, and default configuration
require File.join(File.dirname(__FILE__), 'boot')
require File.join(File.dirname(__FILE__), '../vendor/plugins/engines/boot')
Expand Down Expand Up @@ -45,4 +49,4 @@
end

# Don't update this file, make custom tweaks in config/initializers/custom.rb,
# or create your own file in config/initializers
# or create your own file in config/initializers
3 changes: 3 additions & 0 deletions script/performance/request
@@ -0,0 +1,3 @@
#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../../config/boot'
require 'commands/performance/request'
3 changes: 3 additions & 0 deletions script/process/inspector
@@ -0,0 +1,3 @@
#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../../config/boot'
require 'commands/process/inspector'

0 comments on commit 8f41aa9

Please sign in to comment.