rails 2.0.5 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rails might be problematic. Click here for more details.
- data/CHANGELOG +115 -3
- data/MIT-LICENSE +1 -1
- data/README +67 -14
- data/Rakefile +9 -19
- data/bin/dbconsole +3 -0
- data/bin/rails +0 -0
- data/builtin/rails_info/rails/info.rb +5 -5
- data/configs/apache.conf +0 -0
- data/configs/databases/frontbase.yml +2 -2
- data/configs/databases/mysql.yml +2 -2
- data/configs/databases/oracle.yml +3 -3
- data/configs/databases/postgresql.yml +2 -2
- data/configs/databases/sqlite2.yml +2 -2
- data/configs/databases/sqlite3.yml +2 -2
- data/configs/initializers/new_rails_defaults.rb +15 -0
- data/configs/routes.rb +6 -0
- data/dispatches/dispatch.fcgi +0 -0
- data/dispatches/dispatch.rb +0 -0
- data/environments/boot.rb +1 -0
- data/environments/development.rb +0 -1
- data/environments/environment.rb +15 -7
- data/environments/production.rb +3 -0
- data/environments/test.rb +1 -1
- data/fresh_rakefile +0 -0
- data/helpers/application.rb +5 -0
- data/html/images/rails.png +0 -0
- data/html/index.html +6 -9
- data/html/javascripts/controls.js +1 -1
- data/html/javascripts/dragdrop.js +1 -1
- data/html/javascripts/effects.js +1 -1
- data/lib/commands/console.rb +2 -2
- data/lib/commands/dbconsole.rb +65 -0
- data/lib/commands/generate.rb +0 -0
- data/lib/commands/performance/profiler.rb +1 -1
- data/lib/commands/performance/request.rb +0 -0
- data/lib/commands/plugin.rb +28 -1
- data/lib/commands/server.rb +2 -2
- data/lib/commands/servers/lighttpd.rb +1 -1
- data/lib/commands/servers/mongrel.rb +9 -9
- data/lib/commands/servers/new_mongrel.rb +16 -0
- data/lib/commands/servers/webrick.rb +1 -1
- data/lib/console_app.rb +2 -2
- data/lib/dispatcher.rb +1 -1
- data/lib/fcgi_handler.rb +32 -16
- data/lib/initializer.rb +273 -59
- data/lib/rails/gem_builder.rb +21 -0
- data/lib/rails/gem_dependency.rb +124 -0
- data/lib/rails/mongrel_server/commands.rb +342 -0
- data/lib/rails/mongrel_server/handler.rb +55 -0
- data/lib/rails/plugin.rb +42 -11
- data/lib/rails/plugin/loader.rb +3 -1
- data/lib/rails/plugin/locator.rb +22 -1
- data/lib/rails/version.rb +2 -2
- data/lib/rails_generator/base.rb +1 -1
- data/lib/rails_generator/commands.rb +63 -47
- data/lib/rails_generator/generators/applications/app/app_generator.rb +5 -7
- data/lib/rails_generator/generators/components/controller/templates/controller.rb +1 -4
- data/lib/rails_generator/generators/components/controller/templates/functional_test.rb +1 -1
- data/lib/rails_generator/generators/components/integration_test/templates/integration_test.rb +1 -1
- data/lib/rails_generator/generators/components/mailer/mailer_generator.rb +2 -6
- data/lib/rails_generator/generators/components/mailer/templates/mailer.rb +8 -6
- data/lib/rails_generator/generators/components/mailer/templates/unit_test.rb +1 -1
- data/lib/rails_generator/generators/components/migration/USAGE +4 -4
- data/lib/rails_generator/generators/components/model/templates/unit_test.rb +1 -1
- data/lib/rails_generator/generators/components/observer/templates/unit_test.rb +1 -1
- data/lib/rails_generator/generators/components/plugin/templates/Rakefile +0 -0
- data/lib/rails_generator/generators/components/resource/templates/functional_test.rb +1 -1
- data/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb +2 -1
- data/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb +1 -1
- data/lib/rails_generator/generators/components/scaffold/templates/style.css +0 -20
- data/lib/rails_generator/generators/components/scaffold/templates/view_edit.html.erb +3 -4
- data/lib/rails_generator/generators/components/scaffold/templates/view_new.html.erb +3 -4
- data/lib/rails_generator/lookup.rb +6 -2
- data/lib/rails_generator/options.rb +7 -0
- data/lib/rails_generator/scripts.rb +8 -5
- data/lib/rails_generator/secret_key_generator.rb +12 -8
- data/lib/source_annotation_extractor.rb +40 -0
- data/lib/tasks/databases.rake +52 -27
- data/lib/tasks/framework.rake +22 -29
- data/lib/tasks/gems.rake +64 -0
- data/lib/tasks/misc.rake +47 -0
- data/lib/tasks/testing.rake +1 -1
- data/lib/test_help.rb +8 -0
- metadata +19 -15
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rubygems/installer'
|
3
|
+
|
4
|
+
module Rails
|
5
|
+
|
6
|
+
# this class hijacks the functionality of Gem::Installer by overloading its
|
7
|
+
# initializer to only provide the information needed by
|
8
|
+
# Gem::Installer#build_extensions (which happens to be what we have)
|
9
|
+
class GemBuilder < Gem::Installer
|
10
|
+
|
11
|
+
def initialize(spec, gem_dir)
|
12
|
+
@spec = spec
|
13
|
+
@gem_dir = gem_dir
|
14
|
+
end
|
15
|
+
|
16
|
+
# silence the underlying builder
|
17
|
+
def say(message)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
module Rails
|
2
|
+
class GemDependency
|
3
|
+
attr_accessor :name, :requirement, :version, :lib, :source
|
4
|
+
|
5
|
+
def self.unpacked_path
|
6
|
+
@unpacked_path ||= File.join(RAILS_ROOT, 'vendor', 'gems')
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(name, options = {})
|
10
|
+
require 'rubygems' unless Object.const_defined?(:Gem)
|
11
|
+
|
12
|
+
if options[:requirement]
|
13
|
+
@requirement = options[:requirement]
|
14
|
+
elsif options[:version]
|
15
|
+
@requirement = Gem::Requirement.create(options[:version])
|
16
|
+
end
|
17
|
+
|
18
|
+
@version = @requirement.instance_variable_get("@requirements").first.last if @requirement
|
19
|
+
@name = name.to_s
|
20
|
+
@lib = options[:lib]
|
21
|
+
@source = options[:source]
|
22
|
+
@loaded = @frozen = @load_paths_added = false
|
23
|
+
@unpack_directory = nil
|
24
|
+
end
|
25
|
+
|
26
|
+
def add_load_paths
|
27
|
+
return if @loaded || @load_paths_added
|
28
|
+
unpacked_paths = Dir[File.join(self.class.unpacked_path, "#{@name}-#{@version || "*"}")]
|
29
|
+
if unpacked_paths.empty?
|
30
|
+
args = [@name]
|
31
|
+
args << @requirement.to_s if @requirement
|
32
|
+
gem *args
|
33
|
+
else
|
34
|
+
$LOAD_PATH.unshift File.join(unpacked_paths.first, 'lib')
|
35
|
+
ext = File.join(unpacked_paths.first, 'ext')
|
36
|
+
$LOAD_PATH.unshift(ext) if File.exist?(ext)
|
37
|
+
@frozen = true
|
38
|
+
end
|
39
|
+
@load_paths_added = true
|
40
|
+
rescue Gem::LoadError
|
41
|
+
end
|
42
|
+
|
43
|
+
def dependencies
|
44
|
+
all_dependencies = specification.dependencies.map do |dependency|
|
45
|
+
GemDependency.new(dependency.name, :requirement => dependency.version_requirements)
|
46
|
+
end
|
47
|
+
all_dependencies += all_dependencies.map(&:dependencies).flatten
|
48
|
+
all_dependencies.uniq
|
49
|
+
end
|
50
|
+
|
51
|
+
def gem_dir(base_directory)
|
52
|
+
File.join(base_directory, specification.full_name)
|
53
|
+
end
|
54
|
+
|
55
|
+
def load
|
56
|
+
return if @loaded || @load_paths_added == false
|
57
|
+
require(@lib || @name)
|
58
|
+
@loaded = true
|
59
|
+
rescue LoadError
|
60
|
+
puts $!.to_s
|
61
|
+
$!.backtrace.each { |b| puts b }
|
62
|
+
end
|
63
|
+
|
64
|
+
def frozen?
|
65
|
+
@frozen
|
66
|
+
end
|
67
|
+
|
68
|
+
def loaded?
|
69
|
+
@loaded
|
70
|
+
end
|
71
|
+
|
72
|
+
def load_paths_added?
|
73
|
+
@load_paths_added
|
74
|
+
end
|
75
|
+
|
76
|
+
def install
|
77
|
+
cmd = "#{gem_command} #{install_command.join(' ')}"
|
78
|
+
puts cmd
|
79
|
+
puts %x(#{cmd})
|
80
|
+
end
|
81
|
+
|
82
|
+
def unpack_to(directory)
|
83
|
+
FileUtils.mkdir_p directory
|
84
|
+
Dir.chdir directory do
|
85
|
+
Gem::GemRunner.new.run(unpack_command)
|
86
|
+
end
|
87
|
+
|
88
|
+
# copy the gem's specification into GEMDIR/.specification so that
|
89
|
+
# we can access information about the gem on deployment systems
|
90
|
+
# without having the gem installed
|
91
|
+
spec_filename = File.join(gem_dir(directory), '.specification')
|
92
|
+
File.open(spec_filename, 'w') do |file|
|
93
|
+
file.puts specification.to_yaml
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def ==(other)
|
98
|
+
self.name == other.name && self.requirement == other.requirement
|
99
|
+
end
|
100
|
+
|
101
|
+
private ###################################################################
|
102
|
+
|
103
|
+
def specification
|
104
|
+
@spec ||= Gem.source_index.search(Gem::Dependency.new(@name, @requirement)).sort_by { |s| s.version }.last
|
105
|
+
end
|
106
|
+
|
107
|
+
def gem_command
|
108
|
+
RUBY_PLATFORM =~ /win32/ ? 'gem.bat' : 'gem'
|
109
|
+
end
|
110
|
+
|
111
|
+
def install_command
|
112
|
+
cmd = %w(install) << @name
|
113
|
+
cmd << "--version" << %("#{@requirement.to_s}") if @requirement
|
114
|
+
cmd << "--source" << @source if @source
|
115
|
+
cmd
|
116
|
+
end
|
117
|
+
|
118
|
+
def unpack_command
|
119
|
+
cmd = %w(unpack) << @name
|
120
|
+
cmd << "--version" << "#{@requirement.to_s}" if @requirement
|
121
|
+
cmd
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,342 @@
|
|
1
|
+
# Copyright (c) 2005 Zed A. Shaw
|
2
|
+
# You can redistribute it and/or modify it under the same terms as Ruby.
|
3
|
+
#
|
4
|
+
# Additional work donated by contributors. See http://mongrel.rubyforge.org/attributions.html
|
5
|
+
# for more information.
|
6
|
+
|
7
|
+
require 'optparse'
|
8
|
+
require 'yaml'
|
9
|
+
require 'etc'
|
10
|
+
|
11
|
+
require 'mongrel'
|
12
|
+
require 'rails/mongrel_server/handler'
|
13
|
+
|
14
|
+
module Rails
|
15
|
+
module MongrelServer
|
16
|
+
def self.send_signal(signal, pid_file)
|
17
|
+
pid = open(pid_file).read.to_i
|
18
|
+
print "Sending #{signal} to Mongrel at PID #{pid}..."
|
19
|
+
begin
|
20
|
+
Process.kill(signal, pid)
|
21
|
+
rescue Errno::ESRCH
|
22
|
+
puts "Process does not exist. Not running."
|
23
|
+
end
|
24
|
+
|
25
|
+
puts "Done."
|
26
|
+
end
|
27
|
+
|
28
|
+
class RailsConfigurator < Mongrel::Configurator
|
29
|
+
def setup_mime_types
|
30
|
+
mime = {}
|
31
|
+
|
32
|
+
if defaults[:mime_map]
|
33
|
+
Mongrel.log("Loading additional MIME types from #{defaults[:mime_map]}")
|
34
|
+
mime = load_mime_map(defaults[:mime_map], mime)
|
35
|
+
end
|
36
|
+
|
37
|
+
mime.each {|k,v| Mongrel::DirHandler::add_mime_type(k,v) }
|
38
|
+
end
|
39
|
+
|
40
|
+
def mount_rails(prefix)
|
41
|
+
ENV['RAILS_ENV'] = defaults[:environment]
|
42
|
+
::RAILS_ENV.replace(defaults[:environment]) if defined?(::RAILS_ENV)
|
43
|
+
|
44
|
+
env_location = "#{defaults[:cwd]}/config/environment"
|
45
|
+
require env_location
|
46
|
+
|
47
|
+
ActionController::AbstractRequest.relative_url_root = defaults[:prefix]
|
48
|
+
uri prefix, :handler => Rails::MongrelServer::RailsHandler.new
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
class Start < GemPlugin::Plugin "/commands"
|
53
|
+
include Mongrel::Command::Base
|
54
|
+
|
55
|
+
def configure
|
56
|
+
options [
|
57
|
+
["-e", "--environment ENV", "Rails environment to run as", :@environment, ENV['RAILS_ENV'] || "development"],
|
58
|
+
["-d", "--daemonize", "Run daemonized in the background", :@daemon, false],
|
59
|
+
['-p', '--port PORT', "Which port to bind to", :@port, 3000],
|
60
|
+
['-a', '--address ADDR', "Address to bind to", :@address, "0.0.0.0"],
|
61
|
+
['-l', '--log FILE', "Where to write log messages", :@log_file, "log/mongrel.log"],
|
62
|
+
['-P', '--pid FILE', "Where to write the PID", :@pid_file, "tmp/pids/mongrel.pid"],
|
63
|
+
['-n', '--num-procs INT', "Number of processors active before clients denied", :@num_procs, 1024],
|
64
|
+
['-o', '--timeout TIME', "Time to wait (in seconds) before killing a stalled thread", :@timeout, 60],
|
65
|
+
['-t', '--throttle TIME', "Time to pause (in hundredths of a second) between accepting clients", :@throttle, 0],
|
66
|
+
['-m', '--mime PATH', "A YAML file that lists additional MIME types", :@mime_map, nil],
|
67
|
+
['-c', '--chdir PATH', "Change to dir before starting (will be expanded)", :@cwd, RAILS_ROOT],
|
68
|
+
['-r', '--root PATH', "Set the document root (default 'public')", :@docroot, "public"],
|
69
|
+
['-B', '--debug', "Enable debugging mode", :@debug, false],
|
70
|
+
['-C', '--config PATH', "Use a config file", :@config_file, nil],
|
71
|
+
['-S', '--script PATH', "Load the given file as an extra config script", :@config_script, nil],
|
72
|
+
['-G', '--generate PATH', "Generate a config file for use with -C", :@generate, nil],
|
73
|
+
['', '--user USER', "User to run as", :@user, nil],
|
74
|
+
['', '--group GROUP', "Group to run as", :@group, nil],
|
75
|
+
['', '--prefix PATH', "URL prefix for Rails app", :@prefix, nil],
|
76
|
+
|
77
|
+
['-b', '--binding ADDR', "Address to bind to (deprecated, use -a)", :@address, "0.0.0.0"],
|
78
|
+
['-u', '--debugger', "Enable debugging mode (deprecated, use -B)", :@debug, false]
|
79
|
+
]
|
80
|
+
end
|
81
|
+
|
82
|
+
def validate
|
83
|
+
if @config_file
|
84
|
+
valid_exists?(@config_file, "Config file not there: #@config_file")
|
85
|
+
return false unless @valid
|
86
|
+
@config_file = File.expand_path(@config_file)
|
87
|
+
load_config
|
88
|
+
return false unless @valid
|
89
|
+
end
|
90
|
+
|
91
|
+
@cwd = File.expand_path(@cwd)
|
92
|
+
valid_dir? @cwd, "Invalid path to change to during daemon mode: #@cwd"
|
93
|
+
|
94
|
+
# Change there to start, then we'll have to come back after daemonize
|
95
|
+
Dir.chdir(@cwd)
|
96
|
+
|
97
|
+
valid?(@prefix[0] == ?/ && @prefix[-1] != ?/, "Prefix must begin with / and not end in /") if @prefix
|
98
|
+
valid_dir? File.dirname(@log_file), "Path to log file not valid: #@log_file"
|
99
|
+
valid_dir? File.dirname(@pid_file), "Path to pid file not valid: #@pid_file"
|
100
|
+
valid_dir? @docroot, "Path to docroot not valid: #@docroot"
|
101
|
+
valid_exists? @mime_map, "MIME mapping file does not exist: #@mime_map" if @mime_map
|
102
|
+
valid_exists? @config_file, "Config file not there: #@config_file" if @config_file
|
103
|
+
valid_dir? File.dirname(@generate), "Problem accessing directory to #@generate" if @generate
|
104
|
+
valid_user? @user if @user
|
105
|
+
valid_group? @group if @group
|
106
|
+
|
107
|
+
return @valid
|
108
|
+
end
|
109
|
+
|
110
|
+
def run
|
111
|
+
if @generate
|
112
|
+
@generate = File.expand_path(@generate)
|
113
|
+
Mongrel.log(:error, "** Writing config to \"#@generate\".")
|
114
|
+
open(@generate, "w") {|f| f.write(settings.to_yaml) }
|
115
|
+
Mongrel.log(:error, "** Finished. Run \"mongrel_rails start -C #@generate\" to use the config file.")
|
116
|
+
exit 0
|
117
|
+
end
|
118
|
+
|
119
|
+
config = RailsConfigurator.new(settings) do
|
120
|
+
defaults[:log] = $stdout if defaults[:environment] == 'development'
|
121
|
+
|
122
|
+
Mongrel.log("=> Rails #{Rails.version} application starting on http://#{defaults[:host]}:#{defaults[:port]}")
|
123
|
+
|
124
|
+
unless defaults[:daemon]
|
125
|
+
Mongrel.log("=> Call with -d to detach")
|
126
|
+
Mongrel.log("=> Ctrl-C to shutdown server")
|
127
|
+
start_debugger if defaults[:debug]
|
128
|
+
end
|
129
|
+
|
130
|
+
if defaults[:daemon]
|
131
|
+
if File.exist? defaults[:pid_file]
|
132
|
+
Mongrel.log(:error, "!!! PID file #{defaults[:pid_file]} already exists. Mongrel could be running already. Check your #{defaults[:log_file]} for errors.")
|
133
|
+
Mongrel.log(:error, "!!! Exiting with error. You must stop mongrel and clear the .pid before I'll attempt a start.")
|
134
|
+
exit 1
|
135
|
+
end
|
136
|
+
|
137
|
+
daemonize
|
138
|
+
|
139
|
+
Mongrel.log("Daemonized, any open files are closed. Look at #{defaults[:pid_file]} and #{defaults[:log_file]} for info.")
|
140
|
+
Mongrel.log("Settings loaded from #{@config_file} (they override command line).") if @config_file
|
141
|
+
end
|
142
|
+
|
143
|
+
Mongrel.log("Starting Mongrel listening at #{defaults[:host]}:#{defaults[:port]}, further information can be found in log/mongrel-#{defaults[:host]}-#{defaults[:port]}.log")
|
144
|
+
|
145
|
+
listener do
|
146
|
+
prefix = defaults[:prefix] || '/'
|
147
|
+
|
148
|
+
if defaults[:debug]
|
149
|
+
Mongrel.log("Installing debugging prefixed filters. Look in log/mongrel_debug for the files.")
|
150
|
+
debug(prefix)
|
151
|
+
end
|
152
|
+
|
153
|
+
setup_mime_types
|
154
|
+
dir_handler = Mongrel::DirHandler.new(defaults[:docroot], false)
|
155
|
+
dir_handler.passthrough_missing_files = true
|
156
|
+
|
157
|
+
unless defaults[:environment] == 'production'
|
158
|
+
Mongrel.log("Mounting DirHandler at #{prefix}...")
|
159
|
+
uri prefix, :handler => dir_handler
|
160
|
+
end
|
161
|
+
|
162
|
+
|
163
|
+
Mongrel.log("Starting Rails with #{defaults[:environment]} environment...")
|
164
|
+
Mongrel.log("Mounting Rails at #{prefix}...")
|
165
|
+
mount_rails(prefix)
|
166
|
+
Mongrel.log("Rails loaded.")
|
167
|
+
|
168
|
+
|
169
|
+
Mongrel.log("Loading any Rails specific GemPlugins" )
|
170
|
+
load_plugins
|
171
|
+
|
172
|
+
if defaults[:config_script]
|
173
|
+
Mongrel.log("Loading #{defaults[:config_script]} external config script")
|
174
|
+
run_config(defaults[:config_script])
|
175
|
+
end
|
176
|
+
|
177
|
+
setup_signals
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
config.run
|
182
|
+
Mongrel.log("Mongrel #{Mongrel::Const::MONGREL_VERSION} available at #{@address}:#{@port}")
|
183
|
+
|
184
|
+
if config.defaults[:daemon]
|
185
|
+
config.write_pid_file
|
186
|
+
else
|
187
|
+
Mongrel.log("Use CTRL-C to stop.")
|
188
|
+
tail "log/#{config.defaults[:environment]}.log"
|
189
|
+
end
|
190
|
+
|
191
|
+
config.join
|
192
|
+
|
193
|
+
if config.needs_restart
|
194
|
+
unless RUBY_PLATFORM =~ /djgpp|(cyg|ms|bcc)win|mingw/
|
195
|
+
cmd = "ruby #{__FILE__} start #{original_args.join(' ')}"
|
196
|
+
Mongrel.log("Restarting with arguments: #{cmd}")
|
197
|
+
config.stop(false, true)
|
198
|
+
config.remove_pid_file
|
199
|
+
|
200
|
+
if config.defaults[:daemon]
|
201
|
+
system cmd
|
202
|
+
else
|
203
|
+
Mongrel.log(:error, "Can't restart unless in daemon mode.")
|
204
|
+
exit 1
|
205
|
+
end
|
206
|
+
else
|
207
|
+
Mongrel.log("Win32 does not support restarts. Exiting.")
|
208
|
+
end
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
def load_config
|
213
|
+
settings = {}
|
214
|
+
begin
|
215
|
+
settings = YAML.load_file(@config_file)
|
216
|
+
ensure
|
217
|
+
Mongrel.log(:error, "** Loading settings from #{@config_file} (they override command line).") unless @daemon || settings[:daemon]
|
218
|
+
end
|
219
|
+
|
220
|
+
settings[:includes] ||= ["mongrel"]
|
221
|
+
|
222
|
+
# Config file settings will override command line settings
|
223
|
+
settings.each do |key, value|
|
224
|
+
key = key.to_s
|
225
|
+
if config_keys.include?(key)
|
226
|
+
key = 'address' if key == 'host'
|
227
|
+
self.instance_variable_set("@#{key}", value)
|
228
|
+
else
|
229
|
+
failure "Unknown configuration setting: #{key}"
|
230
|
+
@valid = false
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
def config_keys
|
236
|
+
@config_keys ||=
|
237
|
+
%w(address host port cwd log_file pid_file environment docroot mime_map daemon debug includes config_script num_processors timeout throttle user group prefix)
|
238
|
+
end
|
239
|
+
|
240
|
+
def settings
|
241
|
+
config_keys.inject({}) do |hash, key|
|
242
|
+
value = self.instance_variable_get("@#{key}")
|
243
|
+
key = 'host' if key == 'address'
|
244
|
+
hash[key.to_sym] ||= value
|
245
|
+
hash
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
def start_debugger
|
250
|
+
require_library_or_gem 'ruby-debug'
|
251
|
+
Debugger.start
|
252
|
+
Debugger.settings[:autoeval] = true if Debugger.respond_to?(:settings)
|
253
|
+
Mongrel.log("=> Debugger enabled")
|
254
|
+
rescue Exception
|
255
|
+
Mongrel.log(:error, "You need to install ruby-debug to run the server in debugging mode. With gems, use 'gem install ruby-debug'")
|
256
|
+
exit
|
257
|
+
end
|
258
|
+
|
259
|
+
def tail(log_file)
|
260
|
+
cursor = File.size(log_file)
|
261
|
+
last_checked = Time.now
|
262
|
+
tail_thread = Thread.new do
|
263
|
+
File.open(log_file, 'r') do |f|
|
264
|
+
loop do
|
265
|
+
f.seek cursor
|
266
|
+
if f.mtime > last_checked
|
267
|
+
last_checked = f.mtime
|
268
|
+
contents = f.read
|
269
|
+
cursor += contents.length
|
270
|
+
print contents
|
271
|
+
end
|
272
|
+
sleep 1
|
273
|
+
end
|
274
|
+
end
|
275
|
+
end
|
276
|
+
tail_thread
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
class Stop < GemPlugin::Plugin "/commands"
|
281
|
+
include Mongrel::Command::Base
|
282
|
+
|
283
|
+
def configure
|
284
|
+
options [
|
285
|
+
['-c', '--chdir PATH', "Change to dir before starting (will be expanded).", :@cwd, "."],
|
286
|
+
['-f', '--force', "Force the shutdown (kill -9).", :@force, false],
|
287
|
+
['-w', '--wait SECONDS', "Wait SECONDS before forcing shutdown", :@wait, "0"],
|
288
|
+
['-P', '--pid FILE', "Where the PID file is located.", :@pid_file, "log/mongrel.pid"]
|
289
|
+
]
|
290
|
+
end
|
291
|
+
|
292
|
+
def validate
|
293
|
+
@cwd = File.expand_path(@cwd)
|
294
|
+
valid_dir? @cwd, "Invalid path to change to during daemon mode: #@cwd"
|
295
|
+
|
296
|
+
Dir.chdir @cwd
|
297
|
+
|
298
|
+
valid_exists? @pid_file, "PID file #@pid_file does not exist. Not running?"
|
299
|
+
return @valid
|
300
|
+
end
|
301
|
+
|
302
|
+
def run
|
303
|
+
if @force
|
304
|
+
@wait.to_i.times do |waiting|
|
305
|
+
exit(0) if not File.exist? @pid_file
|
306
|
+
sleep 1
|
307
|
+
end
|
308
|
+
|
309
|
+
Mongrel::send_signal("KILL", @pid_file) if File.exist? @pid_file
|
310
|
+
else
|
311
|
+
Mongrel::send_signal("TERM", @pid_file)
|
312
|
+
end
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
316
|
+
|
317
|
+
class Restart < GemPlugin::Plugin "/commands"
|
318
|
+
include Mongrel::Command::Base
|
319
|
+
|
320
|
+
def configure
|
321
|
+
options [
|
322
|
+
['-c', '--chdir PATH', "Change to dir before starting (will be expanded)", :@cwd, '.'],
|
323
|
+
['-P', '--pid FILE', "Where the PID file is located", :@pid_file, "log/mongrel.pid"]
|
324
|
+
]
|
325
|
+
end
|
326
|
+
|
327
|
+
def validate
|
328
|
+
@cwd = File.expand_path(@cwd)
|
329
|
+
valid_dir? @cwd, "Invalid path to change to during daemon mode: #@cwd"
|
330
|
+
|
331
|
+
Dir.chdir @cwd
|
332
|
+
|
333
|
+
valid_exists? @pid_file, "PID file #@pid_file does not exist. Not running?"
|
334
|
+
return @valid
|
335
|
+
end
|
336
|
+
|
337
|
+
def run
|
338
|
+
MongrelServer::send_signal("USR2", @pid_file)
|
339
|
+
end
|
340
|
+
end
|
341
|
+
end
|
342
|
+
end
|