rails 2.2.2 → 3.0.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.

Files changed (336) hide show
  1. data/bin/rails +8 -18
  2. metadata +118 -452
  3. data/CHANGELOG +0 -2071
  4. data/MIT-LICENSE +0 -20
  5. data/README +0 -256
  6. data/Rakefile +0 -411
  7. data/bin/about +0 -4
  8. data/bin/console +0 -3
  9. data/bin/dbconsole +0 -3
  10. data/bin/destroy +0 -3
  11. data/bin/generate +0 -3
  12. data/bin/performance/benchmarker +0 -3
  13. data/bin/performance/profiler +0 -3
  14. data/bin/performance/request +0 -3
  15. data/bin/plugin +0 -3
  16. data/bin/process/inspector +0 -3
  17. data/bin/process/reaper +0 -3
  18. data/bin/process/spawner +0 -3
  19. data/bin/runner +0 -3
  20. data/bin/server +0 -3
  21. data/builtin/rails_info/rails/info.rb +0 -125
  22. data/builtin/rails_info/rails/info_controller.rb +0 -9
  23. data/builtin/rails_info/rails/info_helper.rb +0 -2
  24. data/builtin/rails_info/rails_info_controller.rb +0 -2
  25. data/config.ru +0 -17
  26. data/configs/apache.conf +0 -40
  27. data/configs/databases/frontbase.yml +0 -28
  28. data/configs/databases/ibm_db.yml +0 -62
  29. data/configs/databases/mysql.yml +0 -57
  30. data/configs/databases/oracle.yml +0 -39
  31. data/configs/databases/postgresql.yml +0 -51
  32. data/configs/databases/sqlite2.yml +0 -19
  33. data/configs/databases/sqlite3.yml +0 -22
  34. data/configs/empty.log +0 -0
  35. data/configs/initializers/inflections.rb +0 -10
  36. data/configs/initializers/mime_types.rb +0 -5
  37. data/configs/initializers/new_rails_defaults.rb +0 -17
  38. data/configs/lighttpd.conf +0 -54
  39. data/configs/locales/en.yml +0 -5
  40. data/configs/routes.rb +0 -43
  41. data/dispatches/dispatch.fcgi +0 -24
  42. data/dispatches/dispatch.rb +0 -10
  43. data/dispatches/gateway.cgi +0 -97
  44. data/doc/README_FOR_APP +0 -5
  45. data/doc/guides/html/2_2_release_notes.html +0 -1185
  46. data/doc/guides/html/actioncontroller_basics.html +0 -1270
  47. data/doc/guides/html/activerecord_validations_callbacks.html +0 -749
  48. data/doc/guides/html/association_basics.html +0 -2585
  49. data/doc/guides/html/authors.html +0 -240
  50. data/doc/guides/html/benchmarking_and_profiling.html +0 -1018
  51. data/doc/guides/html/caching_with_rails.html +0 -583
  52. data/doc/guides/html/command_line.html +0 -434
  53. data/doc/guides/html/configuring.html +0 -438
  54. data/doc/guides/html/creating_plugins.html +0 -1594
  55. data/doc/guides/html/debugging_rails_applications.html +0 -1175
  56. data/doc/guides/html/finders.html +0 -1090
  57. data/doc/guides/html/form_helpers.html +0 -638
  58. data/doc/guides/html/getting_started_with_rails.html +0 -2066
  59. data/doc/guides/html/index.html +0 -349
  60. data/doc/guides/html/layouts_and_rendering.html +0 -1406
  61. data/doc/guides/html/migrations.html +0 -921
  62. data/doc/guides/html/routing_outside_in.html +0 -2213
  63. data/doc/guides/html/security.html +0 -1346
  64. data/doc/guides/html/testing_rails_applications.html +0 -1859
  65. data/doc/guides/source/2_2_release_notes.txt +0 -435
  66. data/doc/guides/source/actioncontroller_basics/changelog.txt +0 -5
  67. data/doc/guides/source/actioncontroller_basics/cookies.txt +0 -34
  68. data/doc/guides/source/actioncontroller_basics/csrf.txt +0 -32
  69. data/doc/guides/source/actioncontroller_basics/filters.txt +0 -119
  70. data/doc/guides/source/actioncontroller_basics/http_auth.txt +0 -24
  71. data/doc/guides/source/actioncontroller_basics/index.txt +0 -40
  72. data/doc/guides/source/actioncontroller_basics/introduction.txt +0 -9
  73. data/doc/guides/source/actioncontroller_basics/methods.txt +0 -39
  74. data/doc/guides/source/actioncontroller_basics/parameter_filtering.txt +0 -14
  75. data/doc/guides/source/actioncontroller_basics/params.txt +0 -93
  76. data/doc/guides/source/actioncontroller_basics/request_response_objects.txt +0 -43
  77. data/doc/guides/source/actioncontroller_basics/rescue.txt +0 -67
  78. data/doc/guides/source/actioncontroller_basics/session.txt +0 -187
  79. data/doc/guides/source/actioncontroller_basics/streaming.txt +0 -91
  80. data/doc/guides/source/actioncontroller_basics/verification.txt +0 -40
  81. data/doc/guides/source/active_record_basics.txt +0 -181
  82. data/doc/guides/source/activerecord_validations_callbacks.txt +0 -404
  83. data/doc/guides/source/association_basics.txt +0 -1840
  84. data/doc/guides/source/authors.txt +0 -39
  85. data/doc/guides/source/benchmarking_and_profiling/appendix.txt +0 -95
  86. data/doc/guides/source/benchmarking_and_profiling/digging_deeper.txt +0 -105
  87. data/doc/guides/source/benchmarking_and_profiling/edge_rails_features.txt +0 -185
  88. data/doc/guides/source/benchmarking_and_profiling/gameplan.txt +0 -27
  89. data/doc/guides/source/benchmarking_and_profiling/index.txt +0 -242
  90. data/doc/guides/source/benchmarking_and_profiling/rubyprof.txt +0 -179
  91. data/doc/guides/source/benchmarking_and_profiling/statistics.txt +0 -57
  92. data/doc/guides/source/caching_with_rails.txt +0 -367
  93. data/doc/guides/source/command_line.txt +0 -147
  94. data/doc/guides/source/configuring.txt +0 -225
  95. data/doc/guides/source/creating_plugins/acts_as_yaffle.txt +0 -191
  96. data/doc/guides/source/creating_plugins/appendix.txt +0 -46
  97. data/doc/guides/source/creating_plugins/controllers.txt +0 -59
  98. data/doc/guides/source/creating_plugins/core_ext.txt +0 -123
  99. data/doc/guides/source/creating_plugins/custom_route.txt +0 -69
  100. data/doc/guides/source/creating_plugins/gem.txt +0 -1
  101. data/doc/guides/source/creating_plugins/generator_method.txt +0 -89
  102. data/doc/guides/source/creating_plugins/helpers.txt +0 -51
  103. data/doc/guides/source/creating_plugins/index.txt +0 -52
  104. data/doc/guides/source/creating_plugins/migration_generator.txt +0 -156
  105. data/doc/guides/source/creating_plugins/models.txt +0 -76
  106. data/doc/guides/source/creating_plugins/odds_and_ends.txt +0 -69
  107. data/doc/guides/source/creating_plugins/test_setup.txt +0 -230
  108. data/doc/guides/source/debugging_rails_applications.txt +0 -733
  109. data/doc/guides/source/finders.txt +0 -668
  110. data/doc/guides/source/form_helpers.txt +0 -345
  111. data/doc/guides/source/getting_started_with_rails.txt +0 -1256
  112. data/doc/guides/source/images/belongs_to.png +0 -0
  113. data/doc/guides/source/images/bullet.gif +0 -0
  114. data/doc/guides/source/images/csrf.png +0 -0
  115. data/doc/guides/source/images/habtm.png +0 -0
  116. data/doc/guides/source/images/has_many.png +0 -0
  117. data/doc/guides/source/images/has_many_through.png +0 -0
  118. data/doc/guides/source/images/has_one.png +0 -0
  119. data/doc/guides/source/images/has_one_through.png +0 -0
  120. data/doc/guides/source/images/header_backdrop.png +0 -0
  121. data/doc/guides/source/images/icons/README +0 -5
  122. data/doc/guides/source/images/icons/callouts/1.png +0 -0
  123. data/doc/guides/source/images/icons/callouts/10.png +0 -0
  124. data/doc/guides/source/images/icons/callouts/11.png +0 -0
  125. data/doc/guides/source/images/icons/callouts/12.png +0 -0
  126. data/doc/guides/source/images/icons/callouts/13.png +0 -0
  127. data/doc/guides/source/images/icons/callouts/14.png +0 -0
  128. data/doc/guides/source/images/icons/callouts/15.png +0 -0
  129. data/doc/guides/source/images/icons/callouts/2.png +0 -0
  130. data/doc/guides/source/images/icons/callouts/3.png +0 -0
  131. data/doc/guides/source/images/icons/callouts/4.png +0 -0
  132. data/doc/guides/source/images/icons/callouts/5.png +0 -0
  133. data/doc/guides/source/images/icons/callouts/6.png +0 -0
  134. data/doc/guides/source/images/icons/callouts/7.png +0 -0
  135. data/doc/guides/source/images/icons/callouts/8.png +0 -0
  136. data/doc/guides/source/images/icons/callouts/9.png +0 -0
  137. data/doc/guides/source/images/icons/caution.png +0 -0
  138. data/doc/guides/source/images/icons/example.png +0 -0
  139. data/doc/guides/source/images/icons/home.png +0 -0
  140. data/doc/guides/source/images/icons/important.png +0 -0
  141. data/doc/guides/source/images/icons/next.png +0 -0
  142. data/doc/guides/source/images/icons/note.png +0 -0
  143. data/doc/guides/source/images/icons/prev.png +0 -0
  144. data/doc/guides/source/images/icons/tip.png +0 -0
  145. data/doc/guides/source/images/icons/up.png +0 -0
  146. data/doc/guides/source/images/icons/warning.png +0 -0
  147. data/doc/guides/source/images/polymorphic.png +0 -0
  148. data/doc/guides/source/images/rails_logo_remix.gif +0 -0
  149. data/doc/guides/source/images/ruby_on_rails_by_mike_rundle2.gif +0 -0
  150. data/doc/guides/source/images/session_fixation.png +0 -0
  151. data/doc/guides/source/index.txt +0 -118
  152. data/doc/guides/source/layouts_and_rendering.txt +0 -982
  153. data/doc/guides/source/migrations/anatomy_of_a_migration.txt +0 -85
  154. data/doc/guides/source/migrations/changelog.txt +0 -5
  155. data/doc/guides/source/migrations/creating_a_migration.txt +0 -109
  156. data/doc/guides/source/migrations/foreign_keys.txt +0 -8
  157. data/doc/guides/source/migrations/index.txt +0 -22
  158. data/doc/guides/source/migrations/rakeing_around.txt +0 -111
  159. data/doc/guides/source/migrations/scheming.txt +0 -47
  160. data/doc/guides/source/migrations/using_models_in_migrations.txt +0 -46
  161. data/doc/guides/source/migrations/writing_a_migration.txt +0 -159
  162. data/doc/guides/source/routing_outside_in.txt +0 -986
  163. data/doc/guides/source/security.txt +0 -984
  164. data/doc/guides/source/stylesheets/base.css +0 -358
  165. data/doc/guides/source/stylesheets/forms.css +0 -35
  166. data/doc/guides/source/stylesheets/more.css +0 -82
  167. data/doc/guides/source/templates/guides.html.erb +0 -97
  168. data/doc/guides/source/templates/inline.css +0 -165
  169. data/doc/guides/source/testing_rails_applications.txt +0 -995
  170. data/environments/boot.rb +0 -109
  171. data/environments/development.rb +0 -17
  172. data/environments/environment.rb +0 -75
  173. data/environments/production.rb +0 -24
  174. data/environments/test.rb +0 -22
  175. data/fresh_rakefile +0 -10
  176. data/helpers/application.rb +0 -15
  177. data/helpers/application_helper.rb +0 -3
  178. data/helpers/performance_test.rb +0 -9
  179. data/helpers/test_helper.rb +0 -38
  180. data/html/404.html +0 -30
  181. data/html/422.html +0 -30
  182. data/html/500.html +0 -33
  183. data/html/favicon.ico +0 -0
  184. data/html/images/rails.png +0 -0
  185. data/html/index.html +0 -274
  186. data/html/javascripts/application.js +0 -2
  187. data/html/javascripts/controls.js +0 -963
  188. data/html/javascripts/dragdrop.js +0 -973
  189. data/html/javascripts/effects.js +0 -1128
  190. data/html/javascripts/prototype.js +0 -4320
  191. data/html/robots.txt +0 -5
  192. data/lib/code_statistics.rb +0 -107
  193. data/lib/commands.rb +0 -17
  194. data/lib/commands/about.rb +0 -3
  195. data/lib/commands/console.rb +0 -45
  196. data/lib/commands/dbconsole.rb +0 -67
  197. data/lib/commands/destroy.rb +0 -6
  198. data/lib/commands/generate.rb +0 -6
  199. data/lib/commands/ncgi/listener +0 -86
  200. data/lib/commands/ncgi/tracker +0 -69
  201. data/lib/commands/performance/benchmarker.rb +0 -24
  202. data/lib/commands/performance/profiler.rb +0 -50
  203. data/lib/commands/performance/request.rb +0 -6
  204. data/lib/commands/plugin.rb +0 -967
  205. data/lib/commands/process/inspector.rb +0 -68
  206. data/lib/commands/process/reaper.rb +0 -149
  207. data/lib/commands/process/spawner.rb +0 -219
  208. data/lib/commands/process/spinner.rb +0 -57
  209. data/lib/commands/runner.rb +0 -48
  210. data/lib/commands/server.rb +0 -49
  211. data/lib/commands/servers/base.rb +0 -31
  212. data/lib/commands/servers/lighttpd.rb +0 -94
  213. data/lib/commands/servers/mongrel.rb +0 -69
  214. data/lib/commands/servers/new_mongrel.rb +0 -16
  215. data/lib/commands/servers/thin.rb +0 -25
  216. data/lib/commands/servers/webrick.rb +0 -66
  217. data/lib/commands/update.rb +0 -4
  218. data/lib/console_app.rb +0 -30
  219. data/lib/console_sandbox.rb +0 -6
  220. data/lib/console_with_helpers.rb +0 -26
  221. data/lib/dispatcher.rb +0 -24
  222. data/lib/fcgi_handler.rb +0 -237
  223. data/lib/initializer.rb +0 -1038
  224. data/lib/performance_test_help.rb +0 -5
  225. data/lib/rails/gem_builder.rb +0 -21
  226. data/lib/rails/gem_dependency.rb +0 -251
  227. data/lib/rails/mongrel_server/commands.rb +0 -342
  228. data/lib/rails/mongrel_server/handler.rb +0 -55
  229. data/lib/rails/plugin.rb +0 -124
  230. data/lib/rails/plugin/loader.rb +0 -152
  231. data/lib/rails/plugin/locator.rb +0 -100
  232. data/lib/rails/rack.rb +0 -6
  233. data/lib/rails/rack/logger.rb +0 -28
  234. data/lib/rails/rack/static.rb +0 -35
  235. data/lib/rails/vendor_gem_source_index.rb +0 -140
  236. data/lib/rails/version.rb +0 -9
  237. data/lib/rails_generator.rb +0 -43
  238. data/lib/rails_generator/base.rb +0 -263
  239. data/lib/rails_generator/commands.rb +0 -616
  240. data/lib/rails_generator/generated_attribute.rb +0 -46
  241. data/lib/rails_generator/generators/applications/app/USAGE +0 -9
  242. data/lib/rails_generator/generators/applications/app/app_generator.rb +0 -184
  243. data/lib/rails_generator/generators/components/controller/USAGE +0 -29
  244. data/lib/rails_generator/generators/components/controller/controller_generator.rb +0 -37
  245. data/lib/rails_generator/generators/components/controller/templates/controller.rb +0 -7
  246. data/lib/rails_generator/generators/components/controller/templates/functional_test.rb +0 -8
  247. data/lib/rails_generator/generators/components/controller/templates/helper.rb +0 -2
  248. data/lib/rails_generator/generators/components/controller/templates/view.html.erb +0 -2
  249. data/lib/rails_generator/generators/components/integration_test/USAGE +0 -8
  250. data/lib/rails_generator/generators/components/integration_test/integration_test_generator.rb +0 -16
  251. data/lib/rails_generator/generators/components/integration_test/templates/integration_test.rb +0 -10
  252. data/lib/rails_generator/generators/components/mailer/USAGE +0 -16
  253. data/lib/rails_generator/generators/components/mailer/mailer_generator.rb +0 -30
  254. data/lib/rails_generator/generators/components/mailer/templates/fixture.erb +0 -3
  255. data/lib/rails_generator/generators/components/mailer/templates/fixture.rhtml +0 -0
  256. data/lib/rails_generator/generators/components/mailer/templates/mailer.rb +0 -15
  257. data/lib/rails_generator/generators/components/mailer/templates/unit_test.rb +0 -20
  258. data/lib/rails_generator/generators/components/mailer/templates/view.erb +0 -3
  259. data/lib/rails_generator/generators/components/mailer/templates/view.rhtml +0 -0
  260. data/lib/rails_generator/generators/components/migration/USAGE +0 -29
  261. data/lib/rails_generator/generators/components/migration/migration_generator.rb +0 -20
  262. data/lib/rails_generator/generators/components/migration/templates/migration.rb +0 -11
  263. data/lib/rails_generator/generators/components/model/USAGE +0 -27
  264. data/lib/rails_generator/generators/components/model/model_generator.rb +0 -45
  265. data/lib/rails_generator/generators/components/model/templates/fixtures.yml +0 -19
  266. data/lib/rails_generator/generators/components/model/templates/migration.rb +0 -16
  267. data/lib/rails_generator/generators/components/model/templates/model.rb +0 -5
  268. data/lib/rails_generator/generators/components/model/templates/unit_test.rb +0 -8
  269. data/lib/rails_generator/generators/components/observer/USAGE +0 -13
  270. data/lib/rails_generator/generators/components/observer/observer_generator.rb +0 -16
  271. data/lib/rails_generator/generators/components/observer/templates/observer.rb +0 -2
  272. data/lib/rails_generator/generators/components/observer/templates/unit_test.rb +0 -8
  273. data/lib/rails_generator/generators/components/performance_test/USAGE +0 -8
  274. data/lib/rails_generator/generators/components/performance_test/performance_test_generator.rb +0 -16
  275. data/lib/rails_generator/generators/components/performance_test/templates/performance_test.rb +0 -9
  276. data/lib/rails_generator/generators/components/plugin/USAGE +0 -25
  277. data/lib/rails_generator/generators/components/plugin/plugin_generator.rb +0 -39
  278. data/lib/rails_generator/generators/components/plugin/templates/MIT-LICENSE +0 -20
  279. data/lib/rails_generator/generators/components/plugin/templates/README +0 -13
  280. data/lib/rails_generator/generators/components/plugin/templates/Rakefile +0 -23
  281. data/lib/rails_generator/generators/components/plugin/templates/USAGE +0 -8
  282. data/lib/rails_generator/generators/components/plugin/templates/generator.rb +0 -8
  283. data/lib/rails_generator/generators/components/plugin/templates/init.rb +0 -1
  284. data/lib/rails_generator/generators/components/plugin/templates/install.rb +0 -1
  285. data/lib/rails_generator/generators/components/plugin/templates/plugin.rb +0 -1
  286. data/lib/rails_generator/generators/components/plugin/templates/tasks.rake +0 -4
  287. data/lib/rails_generator/generators/components/plugin/templates/test_helper.rb +0 -3
  288. data/lib/rails_generator/generators/components/plugin/templates/uninstall.rb +0 -1
  289. data/lib/rails_generator/generators/components/plugin/templates/unit_test.rb +0 -8
  290. data/lib/rails_generator/generators/components/resource/USAGE +0 -23
  291. data/lib/rails_generator/generators/components/resource/resource_generator.rb +0 -74
  292. data/lib/rails_generator/generators/components/resource/templates/controller.rb +0 -2
  293. data/lib/rails_generator/generators/components/resource/templates/functional_test.rb +0 -8
  294. data/lib/rails_generator/generators/components/resource/templates/helper.rb +0 -2
  295. data/lib/rails_generator/generators/components/scaffold/USAGE +0 -29
  296. data/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb +0 -100
  297. data/lib/rails_generator/generators/components/scaffold/templates/controller.rb +0 -85
  298. data/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb +0 -45
  299. data/lib/rails_generator/generators/components/scaffold/templates/helper.rb +0 -2
  300. data/lib/rails_generator/generators/components/scaffold/templates/layout.html.erb +0 -17
  301. data/lib/rails_generator/generators/components/scaffold/templates/style.css +0 -54
  302. data/lib/rails_generator/generators/components/scaffold/templates/view_edit.html.erb +0 -18
  303. data/lib/rails_generator/generators/components/scaffold/templates/view_index.html.erb +0 -24
  304. data/lib/rails_generator/generators/components/scaffold/templates/view_new.html.erb +0 -17
  305. data/lib/rails_generator/generators/components/scaffold/templates/view_show.html.erb +0 -10
  306. data/lib/rails_generator/generators/components/session_migration/USAGE +0 -10
  307. data/lib/rails_generator/generators/components/session_migration/session_migration_generator.rb +0 -18
  308. data/lib/rails_generator/generators/components/session_migration/templates/migration.rb +0 -16
  309. data/lib/rails_generator/lookup.rb +0 -249
  310. data/lib/rails_generator/manifest.rb +0 -53
  311. data/lib/rails_generator/options.rb +0 -150
  312. data/lib/rails_generator/scripts.rb +0 -89
  313. data/lib/rails_generator/scripts/destroy.rb +0 -29
  314. data/lib/rails_generator/scripts/generate.rb +0 -7
  315. data/lib/rails_generator/scripts/update.rb +0 -12
  316. data/lib/rails_generator/secret_key_generator.rb +0 -22
  317. data/lib/rails_generator/simple_logger.rb +0 -46
  318. data/lib/rails_generator/spec.rb +0 -44
  319. data/lib/railties_path.rb +0 -1
  320. data/lib/ruby_version_check.rb +0 -17
  321. data/lib/rubyprof_ext.rb +0 -35
  322. data/lib/source_annotation_extractor.rb +0 -102
  323. data/lib/tasks/annotations.rake +0 -20
  324. data/lib/tasks/databases.rake +0 -416
  325. data/lib/tasks/documentation.rake +0 -95
  326. data/lib/tasks/framework.rake +0 -118
  327. data/lib/tasks/gems.rake +0 -80
  328. data/lib/tasks/log.rake +0 -9
  329. data/lib/tasks/misc.rake +0 -56
  330. data/lib/tasks/rails.rb +0 -8
  331. data/lib/tasks/routes.rake +0 -17
  332. data/lib/tasks/statistics.rake +0 -18
  333. data/lib/tasks/testing.rake +0 -139
  334. data/lib/tasks/tmp.rake +0 -37
  335. data/lib/test_help.rb +0 -27
  336. data/lib/webrick_server.rb +0 -156
@@ -1,68 +0,0 @@
1
- require 'optparse'
2
-
3
- if RUBY_PLATFORM =~ /(:?mswin|mingw)/ then abort("Inspector is only for Unix") end
4
-
5
- OPTIONS = {
6
- :pid_path => File.expand_path(RAILS_ROOT + '/tmp/pids'),
7
- :pattern => "dispatch.*.pid",
8
- :ps => "ps -o pid,state,user,start,time,pcpu,vsz,majflt,command -p %s"
9
- }
10
-
11
- class Inspector
12
- def self.inspect(pid_path, pattern)
13
- new(pid_path, pattern).inspect
14
- end
15
-
16
- def initialize(pid_path, pattern)
17
- @pid_path, @pattern = pid_path, pattern
18
- end
19
-
20
- def inspect
21
- header = `#{OPTIONS[:ps] % 1}`.split("\n")[0] + "\n"
22
- lines = pids.collect { |pid| `#{OPTIONS[:ps] % pid}`.split("\n")[1] }
23
-
24
- puts(header + lines.join("\n"))
25
- end
26
-
27
- private
28
- def pids
29
- pid_files.collect do |pid_file|
30
- File.read(pid_file).to_i
31
- end
32
- end
33
-
34
- def pid_files
35
- Dir.glob(@pid_path + "/" + @pattern)
36
- end
37
- end
38
-
39
-
40
- ARGV.options do |opts|
41
- opts.banner = "Usage: inspector [options]"
42
-
43
- opts.separator ""
44
-
45
- opts.on <<-EOF
46
- Description:
47
- Displays system information about Rails dispatchers (or other processes that use pid files) through
48
- the ps command.
49
-
50
- Examples:
51
- inspector # default ps on all tmp/pids/dispatch.*.pid files
52
- inspector -s 'ps -o user,start,majflt,pcpu,vsz -p %s' # custom ps, %s is where the pid is interleaved
53
- EOF
54
-
55
- opts.on(" Options:")
56
-
57
- opts.on("-s", "--ps=command", "default: #{OPTIONS[:ps]}", String) { |v| OPTIONS[:ps] = v }
58
- opts.on("-p", "--pidpath=path", "default: #{OPTIONS[:pid_path]}", String) { |v| OPTIONS[:pid_path] = v }
59
- opts.on("-r", "--pattern=pattern", "default: #{OPTIONS[:pattern]}", String) { |v| OPTIONS[:pattern] = v }
60
-
61
- opts.separator ""
62
-
63
- opts.on("-h", "--help", "Show this help message.") { puts opts; exit }
64
-
65
- opts.parse!
66
- end
67
-
68
- Inspector.inspect(OPTIONS[:pid_path], OPTIONS[:pattern])
@@ -1,149 +0,0 @@
1
- require 'optparse'
2
- require 'net/http'
3
- require 'uri'
4
-
5
- if RUBY_PLATFORM =~ /(:?mswin|mingw)/ then abort("Reaper is only for Unix") end
6
-
7
- class Killer
8
- class << self
9
- # Searches for all processes matching the given keywords, and then invokes
10
- # a specific action on each of them. This is useful for (e.g.) reloading a
11
- # set of processes:
12
- #
13
- # Killer.process(:reload, "/tmp/pids", "dispatcher.*.pid")
14
- def process(action, pid_path, pattern, keyword)
15
- new(pid_path, pattern, keyword).process(action)
16
- end
17
-
18
- # Forces the (rails) application to reload by sending a +HUP+ signal to the
19
- # process.
20
- def reload(pid)
21
- `kill -s HUP #{pid}`
22
- end
23
-
24
- # Force the (rails) application to restart by sending a +USR2+ signal to the
25
- # process.
26
- def restart(pid)
27
- `kill -s USR2 #{pid}`
28
- end
29
-
30
- # Forces the (rails) application to gracefully terminate by sending a
31
- # +TERM+ signal to the process.
32
- def graceful(pid)
33
- `kill -s TERM #{pid}`
34
- end
35
-
36
- # Forces the (rails) application to terminate immediately by sending a -9
37
- # signal to the process.
38
- def kill(pid)
39
- `kill -9 #{pid}`
40
- end
41
-
42
- # Send a +USR1+ signal to the process.
43
- def usr1(pid)
44
- `kill -s USR1 #{pid}`
45
- end
46
- end
47
-
48
- def initialize(pid_path, pattern, keyword=nil)
49
- @pid_path, @pattern, @keyword = pid_path, pattern, keyword
50
- end
51
-
52
- def process(action)
53
- pids = find_processes
54
-
55
- if pids.empty?
56
- warn "Couldn't find any pid file in '#{@pid_path}' matching '#{@pattern}'"
57
- warn "(also looked for processes matching #{@keyword.inspect})" if @keyword
58
- else
59
- pids.each do |pid|
60
- puts "#{action.capitalize}ing #{pid}"
61
- self.class.send(action, pid)
62
- end
63
-
64
- delete_pid_files if terminating?(action)
65
- end
66
- end
67
-
68
- private
69
- def terminating?(action)
70
- [ "kill", "graceful" ].include?(action)
71
- end
72
-
73
- def find_processes
74
- files = pid_files
75
- if files.empty?
76
- find_processes_via_grep
77
- else
78
- files.collect { |pid_file| File.read(pid_file).to_i }
79
- end
80
- end
81
-
82
- def find_processes_via_grep
83
- lines = `ps axww -o 'pid command' | grep #{@keyword}`.split(/\n/).
84
- reject { |line| line =~ /inq|ps axww|grep|spawn-fcgi|spawner|reaper/ }
85
- lines.map { |line| line[/^\s*(\d+)/, 1].to_i }
86
- end
87
-
88
- def delete_pid_files
89
- pid_files.each { |pid_file| File.delete(pid_file) }
90
- end
91
-
92
- def pid_files
93
- Dir.glob(@pid_path + "/" + @pattern)
94
- end
95
- end
96
-
97
-
98
- OPTIONS = {
99
- :action => "restart",
100
- :pid_path => File.expand_path(RAILS_ROOT + '/tmp/pids'),
101
- :pattern => "dispatch.[0-9]*.pid",
102
- :dispatcher => File.expand_path("#{RAILS_ROOT}/public/dispatch.fcgi")
103
- }
104
-
105
- ARGV.options do |opts|
106
- opts.banner = "Usage: reaper [options]"
107
-
108
- opts.separator ""
109
-
110
- opts.on <<-EOF
111
- Description:
112
- The reaper is used to restart, reload, gracefully exit, and forcefully exit processes
113
- running a Rails Dispatcher (or any other process responding to the same signals). This
114
- is commonly done when a new version of the application is available, so the existing
115
- processes can be updated to use the latest code.
116
-
117
- It uses pid files to work on the processes and by default assume them to be located
118
- in RAILS_ROOT/tmp/pids.
119
-
120
- The reaper actions are:
121
-
122
- * restart : Restarts the application by reloading both application and framework code
123
- * reload : Only reloads the application, but not the framework (like the development environment)
124
- * graceful: Marks all of the processes for exit after the next request
125
- * kill : Forcefully exists all processes regardless of whether they're currently serving a request
126
-
127
- Restart is the most common and default action.
128
-
129
- Examples:
130
- reaper # restarts the default dispatchers
131
- reaper -a reload # reload the default dispatchers
132
- reaper -a kill -r *.pid # kill all processes that keep pids in tmp/pids
133
- EOF
134
-
135
- opts.on(" Options:")
136
-
137
- opts.on("-a", "--action=name", "reload|graceful|kill (default: #{OPTIONS[:action]})", String) { |v| OPTIONS[:action] = v }
138
- opts.on("-p", "--pidpath=path", "default: #{OPTIONS[:pid_path]}", String) { |v| OPTIONS[:pid_path] = v }
139
- opts.on("-r", "--pattern=pattern", "default: #{OPTIONS[:pattern]}", String) { |v| OPTIONS[:pattern] = v }
140
- opts.on("-d", "--dispatcher=path", "DEPRECATED. default: #{OPTIONS[:dispatcher]}", String) { |v| OPTIONS[:dispatcher] = v }
141
-
142
- opts.separator ""
143
-
144
- opts.on("-h", "--help", "Show this help message.") { puts opts; exit }
145
-
146
- opts.parse!
147
- end
148
-
149
- Killer.process(OPTIONS[:action], OPTIONS[:pid_path], OPTIONS[:pattern], OPTIONS[:dispatcher])
@@ -1,219 +0,0 @@
1
- require 'active_support'
2
- require 'optparse'
3
- require 'socket'
4
- require 'fileutils'
5
-
6
- def daemonize #:nodoc:
7
- exit if fork # Parent exits, child continues.
8
- Process.setsid # Become session leader.
9
- exit if fork # Zap session leader. See [1].
10
- Dir.chdir "/" # Release old working directory.
11
- File.umask 0000 # Ensure sensible umask. Adjust as needed.
12
- STDIN.reopen "/dev/null" # Free file descriptors and
13
- STDOUT.reopen "/dev/null", "a" # point them somewhere sensible.
14
- STDERR.reopen STDOUT # STDOUT/ERR should better go to a logfile.
15
- end
16
-
17
- class Spawner
18
- def self.record_pid(name = "#{OPTIONS[:process]}.spawner", id = Process.pid)
19
- FileUtils.mkdir_p(OPTIONS[:pids])
20
- File.open(File.expand_path(OPTIONS[:pids] + "/#{name}.pid"), "w+") { |f| f.write(id) }
21
- end
22
-
23
- def self.spawn_all
24
- OPTIONS[:instances].times do |i|
25
- port = OPTIONS[:port] + i
26
- print "Checking if something is already running on #{OPTIONS[:address]}:#{port}..."
27
-
28
- begin
29
- srv = TCPServer.new(OPTIONS[:address], port)
30
- srv.close
31
- srv = nil
32
-
33
- puts "NO"
34
- puts "Starting dispatcher on port: #{OPTIONS[:address]}:#{port}"
35
-
36
- FileUtils.mkdir_p(OPTIONS[:pids])
37
- spawn(port)
38
- rescue
39
- puts "YES"
40
- end
41
- end
42
- end
43
- end
44
-
45
- class FcgiSpawner < Spawner
46
- def self.spawn(port)
47
- cmd = "#{OPTIONS[:spawner]} -f #{OPTIONS[:dispatcher]} -p #{port} -P #{OPTIONS[:pids]}/#{OPTIONS[:process]}.#{port}.pid"
48
- cmd << " -a #{OPTIONS[:address]}" if can_bind_to_custom_address?
49
- system(cmd)
50
- end
51
-
52
- def self.can_bind_to_custom_address?
53
- @@can_bind_to_custom_address ||= /^\s-a\s/.match `#{OPTIONS[:spawner]} -h`
54
- end
55
- end
56
-
57
- class MongrelSpawner < Spawner
58
- def self.spawn(port)
59
- cmd =
60
- "mongrel_rails start -d " +
61
- "-a #{OPTIONS[:address]} " +
62
- "-p #{port} " +
63
- "-P #{OPTIONS[:pids]}/#{OPTIONS[:process]}.#{port}.pid " +
64
- "-e #{OPTIONS[:environment]} " +
65
- "-c #{OPTIONS[:rails_root]} " +
66
- "-l #{OPTIONS[:rails_root]}/log/mongrel.log"
67
-
68
- # Add prefix functionality to spawner's call to mongrel_rails
69
- # Digging through mongrel's project subversion server, the earliest
70
- # Tag that has prefix implemented in the bin/mongrel_rails file
71
- # is 0.3.15 which also happens to be the earliest tag listed.
72
- # References: http://mongrel.rubyforge.org/svn/tags
73
- if Mongrel::Const::MONGREL_VERSION.to_f >=0.3 && !OPTIONS[:prefix].nil?
74
- cmd = cmd + " --prefix #{OPTIONS[:prefix]}"
75
- end
76
- system(cmd)
77
- end
78
-
79
- def self.can_bind_to_custom_address?
80
- true
81
- end
82
- end
83
-
84
-
85
- begin
86
- require_library_or_gem 'fcgi'
87
- rescue Exception
88
- # FCGI not available
89
- end
90
-
91
- begin
92
- require_library_or_gem 'mongrel'
93
- rescue Exception
94
- # Mongrel not available
95
- end
96
-
97
- server = case ARGV.first
98
- when "fcgi", "mongrel"
99
- ARGV.shift
100
- else
101
- if defined?(Mongrel)
102
- "mongrel"
103
- elsif RUBY_PLATFORM !~ /(:?mswin|mingw)/ && !silence_stderr { `spawn-fcgi -version` }.blank? && defined?(FCGI)
104
- "fcgi"
105
- end
106
- end
107
-
108
- case server
109
- when "fcgi"
110
- puts "=> Starting FCGI dispatchers"
111
- spawner_class = FcgiSpawner
112
- when "mongrel"
113
- puts "=> Starting mongrel dispatchers"
114
- spawner_class = MongrelSpawner
115
- else
116
- puts "Neither FCGI (spawn-fcgi) nor Mongrel was installed and available!"
117
- exit(0)
118
- end
119
-
120
-
121
-
122
- OPTIONS = {
123
- :environment => "production",
124
- :spawner => '/usr/bin/env spawn-fcgi',
125
- :dispatcher => File.expand_path(RELATIVE_RAILS_ROOT + '/public/dispatch.fcgi'),
126
- :pids => File.expand_path(RELATIVE_RAILS_ROOT + "/tmp/pids"),
127
- :rails_root => File.expand_path(RELATIVE_RAILS_ROOT),
128
- :process => "dispatch",
129
- :port => 8000,
130
- :address => '0.0.0.0',
131
- :instances => 3,
132
- :repeat => nil,
133
- :prefix => nil
134
- }
135
-
136
- ARGV.options do |opts|
137
- opts.banner = "Usage: spawner [platform] [options]"
138
-
139
- opts.separator ""
140
-
141
- opts.on <<-EOF
142
- Description:
143
- The spawner is a wrapper for spawn-fcgi and mongrel that makes it
144
- easier to start multiple processes running the Rails dispatcher. The
145
- spawn-fcgi command is included with the lighttpd web server, but can
146
- be used with both Apache and lighttpd (and any other web server
147
- supporting externally managed FCGI processes). Mongrel automatically
148
- ships with with mongrel_rails for starting dispatchers.
149
-
150
- The first choice you need to make is whether to spawn the Rails
151
- dispatchers as FCGI or Mongrel. By default, this spawner will prefer
152
- Mongrel, so if that's installed, and no platform choice is made,
153
- Mongrel is used.
154
-
155
- Then decide a starting port (default is 8000) and the number of FCGI
156
- process instances you'd like to run. So if you pick 9100 and 3
157
- instances, you'll start processes on 9100, 9101, and 9102.
158
-
159
- By setting the repeat option, you get a protection loop, which will
160
- attempt to restart any FCGI processes that might have been exited or
161
- outright crashed.
162
-
163
- You can select bind address for started processes. By default these
164
- listen on every interface. For single machine installations you would
165
- probably want to use 127.0.0.1, hiding them form the outside world.
166
-
167
- Examples:
168
- spawner # starts instances on 8000, 8001, and 8002
169
- # using Mongrel if available.
170
- spawner fcgi # starts instances on 8000, 8001, and 8002
171
- # using FCGI.
172
- spawner mongrel -i 5 # starts instances on 8000, 8001, 8002,
173
- # 8003, and 8004 using Mongrel.
174
- spawner -p 9100 -i 10 # starts 10 instances counting from 9100 to
175
- # 9109 using Mongrel if available.
176
- spawner -p 9100 -r 5 # starts 3 instances counting from 9100 to
177
- # 9102 and attempts start them every 5
178
- # seconds.
179
- spawner -a 127.0.0.1 # starts 3 instances binding to localhost
180
- EOF
181
-
182
- opts.on(" Options:")
183
-
184
- opts.on("-p", "--port=number", Integer, "Starting port number (default: #{OPTIONS[:port]})") { |v| OPTIONS[:port] = v }
185
-
186
- if spawner_class.can_bind_to_custom_address?
187
- opts.on("-a", "--address=ip", String, "Bind to IP address (default: #{OPTIONS[:address]})") { |v| OPTIONS[:address] = v }
188
- end
189
-
190
- opts.on("-p", "--port=number", Integer, "Starting port number (default: #{OPTIONS[:port]})") { |v| OPTIONS[:port] = v }
191
- opts.on("-i", "--instances=number", Integer, "Number of instances (default: #{OPTIONS[:instances]})") { |v| OPTIONS[:instances] = v }
192
- opts.on("-r", "--repeat=seconds", Integer, "Repeat spawn attempts every n seconds (default: off)") { |v| OPTIONS[:repeat] = v }
193
- opts.on("-e", "--environment=name", String, "test|development|production (default: #{OPTIONS[:environment]})") { |v| OPTIONS[:environment] = v }
194
- opts.on("-P", "--prefix=path", String, "URL prefix for Rails app. [Used only with Mongrel > v0.3.15]: (default: #{OPTIONS[:prefix]})") { |v| OPTIONS[:prefix] = v }
195
- opts.on("-n", "--process=name", String, "default: #{OPTIONS[:process]}") { |v| OPTIONS[:process] = v }
196
- opts.on("-s", "--spawner=path", String, "default: #{OPTIONS[:spawner]}") { |v| OPTIONS[:spawner] = v }
197
- opts.on("-d", "--dispatcher=path", String, "default: #{OPTIONS[:dispatcher]}") { |dispatcher| OPTIONS[:dispatcher] = File.expand_path(dispatcher) }
198
-
199
- opts.separator ""
200
-
201
- opts.on("-h", "--help", "Show this help message.") { puts opts; exit }
202
-
203
- opts.parse!
204
- end
205
-
206
- ENV["RAILS_ENV"] = OPTIONS[:environment]
207
-
208
- if OPTIONS[:repeat]
209
- daemonize
210
- trap("TERM") { exit }
211
- spawner_class.record_pid
212
-
213
- loop do
214
- spawner_class.spawn_all
215
- sleep(OPTIONS[:repeat])
216
- end
217
- else
218
- spawner_class.spawn_all
219
- end
@@ -1,57 +0,0 @@
1
- require 'optparse'
2
-
3
- def daemonize #:nodoc:
4
- exit if fork # Parent exits, child continues.
5
- Process.setsid # Become session leader.
6
- exit if fork # Zap session leader. See [1].
7
- Dir.chdir "/" # Release old working directory.
8
- File.umask 0000 # Ensure sensible umask. Adjust as needed.
9
- STDIN.reopen "/dev/null" # Free file descriptors and
10
- STDOUT.reopen "/dev/null", "a" # point them somewhere sensible.
11
- STDERR.reopen STDOUT # STDOUT/ERR should better go to a logfile.
12
- end
13
-
14
- OPTIONS = {
15
- :interval => 5.0,
16
- :command => File.expand_path(RAILS_ROOT + '/script/process/spawner'),
17
- :daemon => false
18
- }
19
-
20
- ARGV.options do |opts|
21
- opts.banner = "Usage: spinner [options]"
22
-
23
- opts.separator ""
24
-
25
- opts.on <<-EOF
26
- Description:
27
- The spinner is a protection loop for the spawner, which will attempt to restart any FCGI processes
28
- that might have been exited or outright crashed. It's a brute-force attempt that'll just try
29
- to run the spawner every X number of seconds, so it does pose a light load on the server.
30
-
31
- Examples:
32
- spinner # attempts to run the spawner with default settings every second with output on the terminal
33
- spinner -i 3 -d # only run the spawner every 3 seconds and detach from the terminal to become a daemon
34
- spinner -c '/path/to/app/script/process/spawner -p 9000 -i 10' -d # using custom spawner
35
- EOF
36
-
37
- opts.on(" Options:")
38
-
39
- opts.on("-c", "--command=path", String) { |v| OPTIONS[:command] = v }
40
- opts.on("-i", "--interval=seconds", Float) { |v| OPTIONS[:interval] = v }
41
- opts.on("-d", "--daemon") { |v| OPTIONS[:daemon] = v }
42
-
43
- opts.separator ""
44
-
45
- opts.on("-h", "--help", "Show this help message.") { puts opts; exit }
46
-
47
- opts.parse!
48
- end
49
-
50
- daemonize if OPTIONS[:daemon]
51
-
52
- trap(OPTIONS[:daemon] ? "TERM" : "INT") { exit }
53
-
54
- loop do
55
- system(OPTIONS[:command])
56
- sleep(OPTIONS[:interval])
57
- end