Class: Rails::Server

Inherits:
Rack::Server
  • Object
show all
Defined in:
railties/lib/rails/commands/server.rb

Defined Under Namespace

Classes: Options

Instance Method Summary collapse

Constructor Details

#initializeServer

Returns a new instance of Server


40
41
42
43
# File 'railties/lib/rails/commands/server.rb', line 40

def initialize(*)
  super
  set_environment
end

Instance Method Details

#appObject

TODO: this is no longer required but we keep it for the moment to support older config.ru files.


46
47
48
49
50
51
# File 'railties/lib/rails/commands/server.rb', line 46

def app
  @app ||= begin
    app = super
    app.respond_to?(:to_app) ? app.to_app : app
  end
end

#default_optionsObject


114
115
116
117
118
119
120
121
122
123
124
# File 'railties/lib/rails/commands/server.rb', line 114

def default_options
  super.merge({
    Port:         3000,
    DoNotReverseLookup:  true,
    environment:  (ENV['RAILS_ENV'] || ENV['RACK_ENV'] || "development").dup,
    daemonize:    false,
    debugger:     false,
    pid:          File.expand_path("tmp/pids/server.pid"),
    config:       File.expand_path("config.ru")
  })
end

#log_pathObject


110
111
112
# File 'railties/lib/rails/commands/server.rb', line 110

def log_path
  "log/#{options[:environment]}.log"
end

#middlewareObject


94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'railties/lib/rails/commands/server.rb', line 94

def middleware
  middlewares = []
  middlewares << [Rails::Rack::Debugger]  if options[:debugger]
  middlewares << [::Rack::ContentLength]

  # FIXME: add Rack::Lock in the case people are using webrick.
  # This is to remain backwards compatible for those who are
  # running webrick in production. We should consider removing this
  # in development.
  if server.name == 'Rack::Handler::WEBrick'
    middlewares << [::Rack::Lock]
  end

  Hash.new(middlewares)
end

#opt_parserObject


53
54
55
# File 'railties/lib/rails/commands/server.rb', line 53

def opt_parser
  Options.new
end

#set_environmentObject


57
58
59
# File 'railties/lib/rails/commands/server.rb', line 57

def set_environment
  ENV["RAILS_ENV"] ||= options[:environment]
end

#startObject


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
# File 'railties/lib/rails/commands/server.rb', line 61

def start
  url = "#{options[:SSLEnable] ? 'https' : 'http'}://#{options[:Host]}:#{options[:Port]}"
  puts "=> Booting #{ActiveSupport::Inflector.demodulize(server)}"
  puts "=> Rails #{Rails.version} application starting in #{Rails.env} on #{url}"
  puts "=> Run `rails server -h` for more startup options"
  if options[:Host].to_s.match(/0\.0\.0\.0/)
    puts "=> Notice: server is listening on all interfaces (#{options[:Host]}). Consider using 127.0.0.1 (--binding option)"
  end
  trap(:INT) { exit }
  puts "=> Ctrl-C to shutdown server" unless options[:daemonize]

  #Create required tmp directories if not found
  %w(cache pids sessions sockets).each do |dir_to_make|
    FileUtils.mkdir_p(File.join(Rails.root, 'tmp', dir_to_make))
  end

  unless options[:daemonize]
    wrapped_app # touch the app so the logger is set up

    console = ActiveSupport::Logger.new($stdout)
    console.formatter = Rails.logger.formatter
    console.level = Rails.logger.level

    Rails.logger.extend(ActiveSupport::Logger.broadcast(console))
  end

  super
ensure
  # The '-h' option calls exit before @options is set.
  # If we call 'options' with it unset, we get double help banners.
  puts 'Exiting' unless @options && options[:daemonize]
end