Class: Mongrel::Rails::RailsConfigurator
- Inherits:
-
Configurator
- Object
- Configurator
- Mongrel::Rails::RailsConfigurator
- Defined in:
- lib/mongrel/rails.rb
Overview
Creates Rails specific configuration options for people to use instead of the base Configurator.
Instance Attribute Summary
Attributes inherited from Configurator
#defaults, #listeners, #needs_restart
Instance Method Summary collapse
-
#already_running? ⇒ Boolean
true if there is a pidfile, and the process with PID specified in it is running.
-
#rails(options = {}) ⇒ Object
Creates a single rails handler and returns it so you can add it to a URI.
-
#reload! ⇒ Object
Reloads Rails.
-
#setup_rails_signals(options = {}) ⇒ Object
Takes the exact same configuration as Mongrel::Configurator (and actually calls that) but sets up the additional HUP handler to call reload!.
Methods inherited from Configurator
#change_privilege, #cloaker, #cloaking_class, #daemonize, #debug, #initialize, #join, #listener, #load_mime_map, #load_plugins, #load_yaml, #log, #plugin, #redirect, #remove_pid_file, #resolve_defaults, #run, #run_config, #setup_signals, #stop, #uri, #write_pid_file
Constructor Details
This class inherits a constructor from Mongrel::Configurator
Instance Method Details
#already_running? ⇒ Boolean
true if there is a pidfile, and the process with PID specified in it is running
185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 |
# File 'lib/mongrel/rails.rb', line 185 def already_running? # if pidfile doesn't exist, cannot be read, or contents don't look like a valid pid # return false and try to start anyway begin pid = File.read(defaults[:pid_file]).strip raise "Contents of #{defaults[:pid_file]} are not a valid number" unless pid =~ /\A\d+\Z/ rescue Object => e return false end begin Process.kill(0, pid.to_i) return true rescue Object => e case e when Errno::ESRCH # no process with this PID return false when Errno::EPERM # on a Linux this means that the process exists, but runs under a different user return true else # can be anything, return false and try to start anyway return false end end end |
#rails(options = {}) ⇒ Object
Creates a single rails handler and returns it so you can add it to a URI. You can actually attach it to as many URIs as you want, but this returns the same RailsHandler for each call.
Requires the following options:
-
:docroot => The public dir to serve from.
-
:environment => Rails environment to use.
-
:cwd => The change to working directory
And understands the following optional settings:
-
:mime => A map of mime types.
Because of how Rails is designed you can only have one installed per Ruby interpreter (talk to them about thread safety). Because of this the first time you call this function it does all the config needed to get your Rails working. After that it returns the one handler you’ve configured. This lets you attach Rails to any URI(s) you want, but it still protects you from threads destroying your handler.
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'lib/mongrel/rails.rb', line 133 def rails(={}) return @rails_handler if @rails_handler ops = resolve_defaults() # fix up some defaults ops[:environment] ||= "development" ops[:docroot] ||= "public" ops[:mime] ||= {} $orig_dollar_quote = $".clone ENV['RAILS_ENV'] = ops[:environment] env_location = "#{ops[:cwd]}/config/environment" require env_location require 'dispatcher' require 'mongrel/rails' ActionController::AbstractRequest.relative_url_root = ops[:prefix] if ops[:prefix] @rails_handler = RailsHandler.new(ops[:docroot], ops[:mime]) end |
#reload! ⇒ Object
Reloads Rails. This isn’t too reliable really, but it should work for most minimal reload purposes. The only reliable way to reload properly is to stop and then start the process.
159 160 161 162 163 164 165 166 167 168 |
# File 'lib/mongrel/rails.rb', line 159 def reload! if not @rails_handler raise "Rails was not configured. Read the docs for RailsConfigurator." end log "Reloading Rails..." @rails_handler.reload! log "Done reloading Rails." end |
#setup_rails_signals(options = {}) ⇒ Object
Takes the exact same configuration as Mongrel::Configurator (and actually calls that) but sets up the additional HUP handler to call reload!.
172 173 174 175 176 177 178 179 180 181 182 |
# File 'lib/mongrel/rails.rb', line 172 def setup_rails_signals(={}) ops = resolve_defaults() setup_signals() if RUBY_PLATFORM !~ /djgpp|(cyg|ms|bcc)win|mingw/ # rails reload trap("HUP") { log "HUP signal received."; reload! } log "Rails signals registered. HUP => reload (without restart). It might not work well." end end |