From f14ad4145622f45e9bf7433b5fdef4ce427efe4b Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Fri, 25 Sep 2009 20:41:40 -0500 Subject: Revert "Start Rails::Application object" This reverts commit 4129449594ad3d8ff2f8fb4836104f25406a104f. --- .gitignore | 1 - railties/lib/rails.rb | 2 - railties/lib/rails/application.rb | 58 ----------------- railties/lib/rails/commands/server.rb | 40 +++++++++++- railties/test/application/load_test.rb | 98 ---------------------------- railties/test/isolation/abstract_unit.rb | 107 ------------------------------- 6 files changed, 38 insertions(+), 268 deletions(-) delete mode 100644 railties/lib/rails.rb delete mode 100644 railties/lib/rails/application.rb delete mode 100644 railties/test/application/load_test.rb delete mode 100644 railties/test/isolation/abstract_unit.rb diff --git a/.gitignore b/.gitignore index 4bb3890760..ae8ebc4607 100644 --- a/.gitignore +++ b/.gitignore @@ -31,4 +31,3 @@ actionpack/bin vendor/gems/ */vendor/gems/ bin/ -railties/tmp \ No newline at end of file diff --git a/railties/lib/rails.rb b/railties/lib/rails.rb deleted file mode 100644 index 329b60fb87..0000000000 --- a/railties/lib/rails.rb +++ /dev/null @@ -1,2 +0,0 @@ -require "rails/application" -require "rails/initializer" \ No newline at end of file diff --git a/railties/lib/rails/application.rb b/railties/lib/rails/application.rb deleted file mode 100644 index e379504f54..0000000000 --- a/railties/lib/rails/application.rb +++ /dev/null @@ -1,58 +0,0 @@ -require 'action_controller' - -module Rails - class Application - # Loads a Rails application from a directory and returns a Rails - # Application object that responds to #call(env) - def self.load(path, options = {}) - require "#{path}/config/environment" - new(path, options) - end - - def initialize(path, options) - @path = path - - ensure_tmp_dirs - - if options[:config] - config = File.join(path, options[:config]) - config = nil unless File.exist?(config) - end - - @app = ::Rack::Builder.new { - use Rails::Rack::LogTailer unless options[:detach] - use Rails::Rack::Debugger if options[:debugger] - if options[:path] - base = options[:path] - ActionController::Base.relative_url_root = base - end - - map base || "/" do - use Rails::Rack::Static - - if config && config =~ /\.ru$/ - instance_eval(File.read(config), config) - elsif config - require config - run Object.const_get(File.basename(config, '.rb').capitalize) - else - run ActionController::Dispatcher.new - end - end - }.to_app - end - - def call(env) - @app.call(env) - end - - private - - def ensure_tmp_dirs - %w(cache pids sessions sockets).each do |dir_to_make| - FileUtils.mkdir_p(File.join(@path, 'tmp', dir_to_make)) - end - end - - end -end \ No newline at end of file diff --git a/railties/lib/rails/commands/server.rb b/railties/lib/rails/commands/server.rb index b8ba4a9f91..823916b1dc 100644 --- a/railties/lib/rails/commands/server.rb +++ b/railties/lib/rails/commands/server.rb @@ -1,6 +1,7 @@ +require 'action_controller' + require 'fileutils' require 'optparse' -require 'rails' options = { :Port => 3000, @@ -45,6 +46,10 @@ end puts "=> Booting #{ActiveSupport::Inflector.demodulize(server)}" puts "=> Rails #{Rails.version} application starting on http://#{options[:Host]}:#{options[:Port]}#{options[:path]}" +%w(cache pids sessions sockets).each do |dir_to_make| + FileUtils.mkdir_p(File.join(RAILS_ROOT, 'tmp', dir_to_make)) +end + if options[:detach] Process.daemon pid = "#{RAILS_ROOT}/tmp/pids/server.pid" @@ -55,7 +60,38 @@ end ENV["RAILS_ENV"] = options[:environment] RAILS_ENV.replace(options[:environment]) if defined?(RAILS_ENV) -app = Rails::Application.load(RAILS_ROOT, options) +if File.exist?(options[:config]) + config = options[:config] + if config =~ /\.ru$/ + cfgfile = File.read(config) + if cfgfile[/^#\\(.*)/] + opts.parse!($1.split(/\s+/)) + end + inner_app = eval("Rack::Builder.new {( " + cfgfile + "\n )}.to_app", nil, config) + else + require config + inner_app = Object.const_get(File.basename(config, '.rb').capitalize) + end +else + require RAILS_ROOT + "/config/environment" + inner_app = ActionController::Dispatcher.new +end + +if options[:path].nil? + map_path = "/" +else + ActionController::Base.relative_url_root = options[:path] + map_path = options[:path] +end + +app = Rack::Builder.new { + use Rails::Rack::LogTailer unless options[:detach] + use Rails::Rack::Debugger if options[:debugger] + map map_path do + use Rails::Rack::Static + run inner_app + end +}.to_app puts "=> Call with -d to detach" diff --git a/railties/test/application/load_test.rb b/railties/test/application/load_test.rb deleted file mode 100644 index 48917f1825..0000000000 --- a/railties/test/application/load_test.rb +++ /dev/null @@ -1,98 +0,0 @@ -require "isolation/abstract_unit" -require "rails" -require "rack" - -module ApplicationTests - class LoadTest < Test::Unit::TestCase - include ActiveSupport::Testing::Isolation - - def setup - build_app - end - - test "rails app is present" do - assert File.exist?(app_path("config")) - end - - test "running Rails::Application.load on the path returns a (vaguely) useful application" do - @app = Rails::Application.load app_path - assert_welcome get("/") - end - - test "setting the map_path of the application" do - controller "says", <<-CONTROLLER - class SaysController < ActionController::Base - def index ; render :text => "MOO!" ; end - end - CONTROLLER - - @app = Rails::Application.load app_path, :path => "/the/cow" - - assert_missing get("/") - assert_welcome get("/the/cow") - assert_body "MOO!", get("/the/cow/says") - end - - test "url generation with a base path" do - controller "generatin", <<-CONTROLLER - class GeneratinController < ActionController::Base - def index ; render :text => url_for(:action => "index", :only_path => true) ; end - end - CONTROLLER - - @app = Rails::Application.load app_path, :path => "/base" - - assert_body "/base/generatin", get("/base/generatin") - end - - test "config.ru is used" do - app_file "config.ru", <<-CONFIG - class MyMiddleware - def initialize(app) - @app = app - end - - def call(env) - status, headers, body = @app.call(env) - headers["Config-Ru-Test"] = "TESTING" - [status, headers, body] - end - end - - use MyMiddleware - run proc {|env| [200, {"Content-Type" => "text/html"}, ["VICTORY"]] } - CONFIG - - @app = Rails::Application.load app_path, :config => "config.ru" - - assert_body "VICTORY", get("/omg") - assert_header "Config-Ru-Test", "TESTING", get("/omg") - end - - test "arbitrary.rb can be used as a config" do - app_file "myapp.rb", <<-CONFIG - Myapp = proc {|env| [200, {"Content-Type" => "text/html"}, ["OMG ROBOTS"]] } - CONFIG - - @app = Rails::Application.load app_path, :config => "myapp.rb" - - assert_body "OMG ROBOTS", get("/omg") - end - - %w(cache pids sessions sockets).each do |dir| - test "creating tmp/#{dir} if it does not exist" do - FileUtils.rm_r(app_path("tmp/#{dir}")) - Rails::Application.load app_path - assert File.exist?(app_path("tmp/#{dir}")) - end - end - - test "LogTailer middleware is present when not detached" do - - end - - test "Debugger middleware is present when using debugger option" do - - end - end -end \ No newline at end of file diff --git a/railties/test/isolation/abstract_unit.rb b/railties/test/isolation/abstract_unit.rb deleted file mode 100644 index 18ac745101..0000000000 --- a/railties/test/isolation/abstract_unit.rb +++ /dev/null @@ -1,107 +0,0 @@ -# Note: -# It is important to keep this file as light as possible -# the goal for tests that require this is to test booting up -# rails from an empty state, so anything added here could -# hide potential failures -# -# It is also good to know what is the bare minimum to get -# Rails booted up. - -# TODO: Remove rubygems when possible -require 'rubygems' -require 'test/unit' - -# TODO: Remove setting this magic constant -RAILS_FRAMEWORK_ROOT = File.expand_path("#{File.dirname(__FILE__)}/../../..") - -# These load paths usually get set inside of boot.rb -$:.unshift "#{RAILS_FRAMEWORK_ROOT}/railties/lib" -$:.unshift "#{RAILS_FRAMEWORK_ROOT}/actionpack/lib" - -# These files do not require any others and are needed -# to run the tests -require "#{RAILS_FRAMEWORK_ROOT}/activesupport/lib/active_support/testing/isolation" -require "#{RAILS_FRAMEWORK_ROOT}/activesupport/lib/active_support/testing/declarative" - -module TestHelpers - module Paths - module_function - - def tmp_path(*args) - File.expand_path(File.join(File.dirname(__FILE__), *%w[.. .. tmp] + args)) - end - - def app_path(*args) - tmp_path(*%w[app] + args) - end - end - - module Rack - def extract_body(response) - "".tap do |body| - response[2].each {|chunk| body << chunk } - end - end - - def get(path) - @app.call(::Rack::MockRequest.env_for(path)) - end - - def assert_welcome(resp) - assert_equal 200, resp[0] - assert resp[1]["Content-Type"] = "text/html" - assert extract_body(resp).match(/Welcome aboard/) - end - - def assert_success(resp) - assert_equal 202, resp[0] - end - - def assert_missing(resp) - assert_equal 404, resp[0] - end - - def assert_header(key, value, resp) - assert_equal value, resp[1][key.to_s] - end - - def assert_body(expected, resp) - assert_equal expected, extract_body(resp) - end - end - - module Generation - def build_app - FileUtils.cp_r(tmp_path('app_template'), app_path) - end - - def app_file(path, contents) - File.open(app_path(path), 'w') do |f| - f.puts contents - end - end - - def controller(name, contents) - app_file("app/controllers/#{name}_controller.rb", contents) - end - end -end - -class Test::Unit::TestCase - include TestHelpers::Paths - include TestHelpers::Rack - include TestHelpers::Generation - extend ActiveSupport::Testing::Declarative -end - -# Create a scope and build a fixture rails app -Module.new do - extend TestHelpers::Paths - # Build a rails app - if File.exist?(tmp_path) - FileUtils.rm_rf(tmp_path) - end - - FileUtils.mkdir(tmp_path) - `#{Gem.ruby} #{RAILS_FRAMEWORK_ROOT}/railties/bin/rails #{tmp_path('app_template')}` -end \ No newline at end of file -- cgit v1.2.3