blob: 928b195d8d66e21d4c18f889dd8d4e340ad258eb (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
# Don't change this file!
# Configure your app in config/environment.rb and config/environments/*.rb
module Rails
# Mark the version of Rails that generated the boot.rb file. This is
# a temporary solution and will most likely be removed as Rails 3.0
# comes closer.
BOOTSTRAP_VERSION = "3.0"
class << self
def boot!
unless booted?
root = File.expand_path('../..', __FILE__)
booter = File.exist?("#{root}/vendor/rails") ? VendorBoot : GemBoot
booter.new(root).run
end
end
def booted?
defined? Rails::Initializer
end
end
class Boot
def initialize(root)
@root = root
end
def run
preinitialize
set_load_paths
load_initializer
end
def preinitialize
path = "#{@root}/config/preinitializer.rb"
load(path) if File.exist?(path)
end
def set_load_paths
%w(
actionmailer/lib
actionpack/lib
activemodel/lib
activerecord/lib
activeresource/lib
activesupport/lib
railties/lib
railties
).reverse_each do |path|
path = "#{framework_root_path}/#{path}"
$LOAD_PATH.unshift(path) if File.directory?(path)
$LOAD_PATH.uniq!
end
end
def framework_root_path
defined?(::RAILS_FRAMEWORK_ROOT) ? ::RAILS_FRAMEWORK_ROOT : "#{@root}/vendor/rails"
end
end
class VendorBoot < Boot
def load_initializer
require "rails"
install_gem_spec_stubs
end
def install_gem_spec_stubs
begin; require "rubygems"; rescue LoadError; return; end
%w(rails activesupport activerecord actionpack actionmailer activeresource).each do |stub|
Gem.loaded_specs[stub] ||= Gem::Specification.new do |s|
s.name = stub
s.version = Rails::VERSION::STRING
s.loaded_from = ""
end
end
end
end
class GemBoot < Boot
def load_initializer
load_rubygems
load_rails_gem
require 'rails'
end
def load_rails_gem
if version = 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
def rubygems_version
Gem::RubyGemsVersion rescue nil
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
min_version = '1.3.2'
require 'rubygems'
unless rubygems_version >= min_version
$stderr.puts %Q(Rails requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.)
exit 1
end
rescue LoadError
$stderr.puts %Q(Rails requires RubyGems >= #{min_version}. 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("#{@root}/config/environment.rb")
end
end
end
# All that for this:
Rails.boot!
|