authorails 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/AUTHORAILS_README +20 -0
- data/CHANGELOG +1366 -0
- data/MIT-LICENSE +20 -0
- data/README +182 -0
- data/Rakefile +334 -0
- data/bin/about +3 -0
- data/bin/authorails +19 -0
- data/bin/breakpointer +3 -0
- data/bin/console +3 -0
- data/bin/destroy +3 -0
- data/bin/generate +3 -0
- data/bin/performance/benchmarker +3 -0
- data/bin/performance/profiler +3 -0
- data/bin/plugin +3 -0
- data/bin/process/inspector +3 -0
- data/bin/process/reaper +3 -0
- data/bin/process/spawner +3 -0
- data/bin/runner +3 -0
- data/bin/server +3 -0
- data/builtin/rails_info/rails/info.rb +123 -0
- data/builtin/rails_info/rails/info_controller.rb +9 -0
- data/builtin/rails_info/rails/info_helper.rb +2 -0
- data/builtin/rails_info/rails_info_controller.rb +2 -0
- data/configs/apache.conf +40 -0
- data/configs/databases/frontbase.yml +28 -0
- data/configs/databases/mysql.yml +48 -0
- data/configs/databases/oracle.yml +39 -0
- data/configs/databases/postgresql.yml +44 -0
- data/configs/databases/sqlite2.yml +16 -0
- data/configs/databases/sqlite3.yml +19 -0
- data/configs/empty.log +0 -0
- data/configs/lighttpd.conf +54 -0
- data/configs/routes.rb +23 -0
- data/controllers/accounts_controller.rb +11 -0
- data/controllers/admin_controller.rb +76 -0
- data/controllers/begin_controller.rb +5 -0
- data/controllers/login_controller.rb +101 -0
- data/controllers/permission_controller.rb +91 -0
- data/controllers/roles_controller.rb +58 -0
- data/controllers/tables_controller.rb +714 -0
- data/dispatches/dispatch.fcgi +24 -0
- data/dispatches/dispatch.rb +10 -0
- data/dispatches/gateway.cgi +97 -0
- data/doc/README_FOR_APP +2 -0
- data/environments/boot.rb +45 -0
- data/environments/development.rb +21 -0
- data/environments/environment.rb +63 -0
- data/environments/production.rb +18 -0
- data/environments/test.rb +19 -0
- data/fresh_rakefile +10 -0
- data/helpers/application.rb +607 -0
- data/helpers/application_helper.rb +315 -0
- data/helpers/permission_helper.rb +27 -0
- data/helpers/test_helper.rb +28 -0
- data/html/404.html +30 -0
- data/html/500.html +30 -0
- data/html/favicon.ico +0 -0
- data/html/images/ArrowDn.png +0 -0
- data/html/images/ArrowUp.png +0 -0
- data/html/images/arrow.gif +0 -0
- data/html/images/authorails_logo.gif +0 -0
- data/html/images/delete.png +0 -0
- data/html/images/edit.png +0 -0
- data/html/images/minus.gif +0 -0
- data/html/images/plus.gif +0 -0
- data/html/images/rails.png +0 -0
- data/html/images/show.png +0 -0
- data/html/images/spinner.gif +0 -0
- data/html/index.html +273 -0
- data/html/javascripts/application.js +2 -0
- data/html/javascripts/controls.js +833 -0
- data/html/javascripts/dragdrop.js +942 -0
- data/html/javascripts/effects.js +1088 -0
- data/html/javascripts/live_validation.js +4 -0
- data/html/javascripts/prototype.js +2515 -0
- data/html/robots.txt +1 -0
- data/lib/authorails/version.rb +9 -0
- data/lib/binding_of_caller.rb +85 -0
- data/lib/breakpoint.rb +553 -0
- data/lib/breakpoint_client.rb +196 -0
- data/lib/code_statistics.rb +107 -0
- data/lib/commands.rb +17 -0
- data/lib/commands/about.rb +2 -0
- data/lib/commands/breakpointer.rb +1 -0
- data/lib/commands/console.rb +25 -0
- data/lib/commands/destroy.rb +6 -0
- data/lib/commands/generate.rb +6 -0
- data/lib/commands/ncgi/listener +86 -0
- data/lib/commands/ncgi/tracker +69 -0
- data/lib/commands/performance/benchmarker.rb +24 -0
- data/lib/commands/performance/profiler.rb +50 -0
- data/lib/commands/plugin.rb +918 -0
- data/lib/commands/process/inspector.rb +68 -0
- data/lib/commands/process/reaper.rb +149 -0
- data/lib/commands/process/spawner.rb +209 -0
- data/lib/commands/process/spinner.rb +57 -0
- data/lib/commands/runner.rb +48 -0
- data/lib/commands/server.rb +39 -0
- data/lib/commands/servers/base.rb +19 -0
- data/lib/commands/servers/lighttpd.rb +94 -0
- data/lib/commands/servers/mongrel.rb +65 -0
- data/lib/commands/servers/webrick.rb +59 -0
- data/lib/commands/update.rb +4 -0
- data/lib/console_app.rb +27 -0
- data/lib/console_sandbox.rb +6 -0
- data/lib/console_with_helpers.rb +23 -0
- data/lib/dispatcher.rb +173 -0
- data/lib/fcgi_handler.rb +225 -0
- data/lib/initializer.rb +702 -0
- data/lib/rails_generator.rb +43 -0
- data/lib/rails_generator/base.rb +261 -0
- data/lib/rails_generator/commands.rb +581 -0
- data/lib/rails_generator/generated_attribute.rb +42 -0
- data/lib/rails_generator/generators/applications/app/USAGE +16 -0
- data/lib/rails_generator/generators/applications/app/app_generator.rb +341 -0
- data/lib/rails_generator/generators/components/controller/USAGE +30 -0
- data/lib/rails_generator/generators/components/controller/controller_generator.rb +37 -0
- data/lib/rails_generator/generators/components/controller/templates/controller.rb +10 -0
- data/lib/rails_generator/generators/components/controller/templates/functional_test.rb +18 -0
- data/lib/rails_generator/generators/components/controller/templates/helper.rb +2 -0
- data/lib/rails_generator/generators/components/controller/templates/view.rhtml +2 -0
- data/lib/rails_generator/generators/components/integration_test/USAGE +14 -0
- data/lib/rails_generator/generators/components/integration_test/integration_test_generator.rb +16 -0
- data/lib/rails_generator/generators/components/integration_test/templates/integration_test.rb +10 -0
- data/lib/rails_generator/generators/components/mailer/USAGE +18 -0
- data/lib/rails_generator/generators/components/mailer/mailer_generator.rb +34 -0
- data/lib/rails_generator/generators/components/mailer/templates/fixture.rhtml +3 -0
- data/lib/rails_generator/generators/components/mailer/templates/mailer.rb +13 -0
- data/lib/rails_generator/generators/components/mailer/templates/unit_test.rb +37 -0
- data/lib/rails_generator/generators/components/mailer/templates/view.rhtml +3 -0
- data/lib/rails_generator/generators/components/migration/USAGE +14 -0
- data/lib/rails_generator/generators/components/migration/migration_generator.rb +7 -0
- data/lib/rails_generator/generators/components/migration/templates/migration.rb +7 -0
- data/lib/rails_generator/generators/components/model/USAGE +26 -0
- data/lib/rails_generator/generators/components/model/model_generator.rb +38 -0
- data/lib/rails_generator/generators/components/model/templates/fixtures.yml +11 -0
- data/lib/rails_generator/generators/components/model/templates/migration.rb +13 -0
- data/lib/rails_generator/generators/components/model/templates/model.rb +2 -0
- data/lib/rails_generator/generators/components/model/templates/unit_test.rb +10 -0
- data/lib/rails_generator/generators/components/observer/USAGE +15 -0
- data/lib/rails_generator/generators/components/observer/observer_generator.rb +16 -0
- data/lib/rails_generator/generators/components/observer/templates/observer.rb +2 -0
- data/lib/rails_generator/generators/components/observer/templates/unit_test.rb +10 -0
- data/lib/rails_generator/generators/components/plugin/USAGE +35 -0
- data/lib/rails_generator/generators/components/plugin/plugin_generator.rb +38 -0
- data/lib/rails_generator/generators/components/plugin/templates/README +4 -0
- data/lib/rails_generator/generators/components/plugin/templates/Rakefile +22 -0
- data/lib/rails_generator/generators/components/plugin/templates/USAGE +8 -0
- data/lib/rails_generator/generators/components/plugin/templates/generator.rb +8 -0
- data/lib/rails_generator/generators/components/plugin/templates/init.rb +1 -0
- data/lib/rails_generator/generators/components/plugin/templates/install.rb +1 -0
- data/lib/rails_generator/generators/components/plugin/templates/plugin.rb +1 -0
- data/lib/rails_generator/generators/components/plugin/templates/tasks.rake +4 -0
- data/lib/rails_generator/generators/components/plugin/templates/uninstall.rb +1 -0
- data/lib/rails_generator/generators/components/plugin/templates/unit_test.rb +8 -0
- data/lib/rails_generator/generators/components/resource/resource_generator.rb +76 -0
- data/lib/rails_generator/generators/components/resource/templates/USAGE +18 -0
- data/lib/rails_generator/generators/components/resource/templates/controller.rb +2 -0
- data/lib/rails_generator/generators/components/resource/templates/fixtures.yml +11 -0
- data/lib/rails_generator/generators/components/resource/templates/functional_test.rb +20 -0
- data/lib/rails_generator/generators/components/resource/templates/helper.rb +2 -0
- data/lib/rails_generator/generators/components/resource/templates/migration.rb +13 -0
- data/lib/rails_generator/generators/components/resource/templates/model.rb +2 -0
- data/lib/rails_generator/generators/components/resource/templates/unit_test.rb +10 -0
- data/lib/rails_generator/generators/components/scaffold/USAGE +32 -0
- data/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb +208 -0
- data/lib/rails_generator/generators/components/scaffold/templates/controller.rb +134 -0
- data/lib/rails_generator/generators/components/scaffold/templates/form.rhtml +3 -0
- data/lib/rails_generator/generators/components/scaffold/templates/form_scaffolding.rhtml +35 -0
- data/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb +102 -0
- data/lib/rails_generator/generators/components/scaffold/templates/helper.rb +2 -0
- data/lib/rails_generator/generators/components/scaffold/templates/layout.rhtml +17 -0
- data/lib/rails_generator/generators/components/scaffold/templates/partial_list_elements.rhtml +127 -0
- data/lib/rails_generator/generators/components/scaffold/templates/style.css +74 -0
- data/lib/rails_generator/generators/components/scaffold/templates/view_edit.rhtml +75 -0
- data/lib/rails_generator/generators/components/scaffold/templates/view_list.rhtml +30 -0
- data/lib/rails_generator/generators/components/scaffold/templates/view_new.rhtml +8 -0
- data/lib/rails_generator/generators/components/scaffold/templates/view_show.rhtml +37 -0
- data/lib/rails_generator/generators/components/scaffold_resource/USAGE +29 -0
- data/lib/rails_generator/generators/components/scaffold_resource/scaffold_resource_generator.rb +92 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/controller.rb +79 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/fixtures.yml +11 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/functional_test.rb +57 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/helper.rb +2 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/layout.rhtml +17 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/migration.rb +13 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/model.rb +2 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/style.css +74 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/unit_test.rb +10 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/view_edit.rhtml +19 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/view_index.rhtml +24 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/view_new.rhtml +18 -0
- data/lib/rails_generator/generators/components/scaffold_resource/templates/view_show.rhtml +10 -0
- data/lib/rails_generator/generators/components/session_migration/USAGE +15 -0
- data/lib/rails_generator/generators/components/session_migration/session_migration_generator.rb +18 -0
- data/lib/rails_generator/generators/components/session_migration/templates/migration.rb +16 -0
- data/lib/rails_generator/generators/components/web_service/USAGE +28 -0
- data/lib/rails_generator/generators/components/web_service/templates/api_definition.rb +5 -0
- data/lib/rails_generator/generators/components/web_service/templates/controller.rb +8 -0
- data/lib/rails_generator/generators/components/web_service/templates/functional_test.rb +19 -0
- data/lib/rails_generator/generators/components/web_service/web_service_generator.rb +29 -0
- data/lib/rails_generator/lookup.rb +209 -0
- data/lib/rails_generator/manifest.rb +53 -0
- data/lib/rails_generator/options.rb +143 -0
- data/lib/rails_generator/scripts.rb +83 -0
- data/lib/rails_generator/scripts/destroy.rb +7 -0
- data/lib/rails_generator/scripts/generate.rb +7 -0
- data/lib/rails_generator/scripts/update.rb +12 -0
- data/lib/rails_generator/simple_logger.rb +46 -0
- data/lib/rails_generator/spec.rb +44 -0
- data/lib/railties_path.rb +1 -0
- data/lib/ruby_version_check.rb +17 -0
- data/lib/rubyprof_ext.rb +35 -0
- data/lib/tasks/databases.rake +187 -0
- data/lib/tasks/documentation.rake +82 -0
- data/lib/tasks/framework.rake +112 -0
- data/lib/tasks/log.rake +9 -0
- data/lib/tasks/misc.rake +4 -0
- data/lib/tasks/pre_namespace_aliases.rake +53 -0
- data/lib/tasks/rails.rb +8 -0
- data/lib/tasks/statistics.rake +18 -0
- data/lib/tasks/testing.rake +120 -0
- data/lib/tasks/tmp.rake +37 -0
- data/lib/test_help.rb +19 -0
- data/lib/webrick_server.rb +166 -0
- data/libs/migration_helper.rb +11 -0
- data/migrations/001_create_logins.rb +22 -0
- data/migrations/002_create_admins.rb +16 -0
- data/migrations/003_create_roles.rb +13 -0
- data/migrations/004_create_tables.rb +11 -0
- data/migrations/005_create_attr_types.rb +13 -0
- data/migrations/006_create_table_fields.rb +22 -0
- data/migrations/007_create_tab_operations.rb +13 -0
- data/migrations/008_create_attr_operations.rb +13 -0
- data/migrations/009_create_tab_permissions.rb +21 -0
- data/migrations/010_create_attr_permissions.rb +21 -0
- data/migrations/011_create_relations.rb +23 -0
- data/migrations/012_create_scaffolds.rb +11 -0
- data/migrations/013_create_relation_permissions.rb +20 -0
- data/models/admin.rb +38 -0
- data/models/attr_operation.rb +3 -0
- data/models/attr_permission.rb +5 -0
- data/models/attr_type.rb +3 -0
- data/models/login.rb +51 -0
- data/models/relation.rb +5 -0
- data/models/relation_permission.rb +4 -0
- data/models/role.rb +13 -0
- data/models/scaffold.rb +2 -0
- data/models/tab_operation.rb +3 -0
- data/models/tab_permission.rb +5 -0
- data/models/table.rb +18 -0
- data/models/table_field.rb +6 -0
- data/plugins/redhillonrails_core/CHANGELOG +186 -0
- data/plugins/redhillonrails_core/MIT-LICENSE +20 -0
- data/plugins/redhillonrails_core/README +152 -0
- data/plugins/redhillonrails_core/init.rb +1 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/base.rb +54 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/abstract_adapter.rb +46 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/column.rb +21 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/foreign_key_definition.rb +26 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/index_definition.rb +11 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/mysql_adapter.rb +94 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/mysql_column.rb +8 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/postgresql_adapter.rb +131 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/schema_statements.rb +23 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/sqlite3_adapter.rb +9 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/table_definition.rb +27 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/schema.rb +25 -0
- data/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/schema_dumper.rb +58 -0
- data/plugins/redhillonrails_core/lib/redhillonrails_core.rb +19 -0
- data/plugins/redhillonrails_core/tasks/db/comments.rake +9 -0
- data/plugins/schema_validations/CHANGELOG +149 -0
- data/plugins/schema_validations/MIT-LICENSE +20 -0
- data/plugins/schema_validations/README +54 -0
- data/plugins/schema_validations/about.yml +5 -0
- data/plugins/schema_validations/init.rb +1 -0
- data/plugins/schema_validations/install.rb +1 -0
- data/plugins/schema_validations/lib/red_hill_consulting/schema_validations/active_record/base.rb +108 -0
- data/plugins/schema_validations/lib/schema_validations.rb +1 -0
- data/plugins/svn/README +69 -0
- data/plugins/svn/Rakefile +22 -0
- data/plugins/svn/assets/javascripts/live_validation.js +4 -0
- data/plugins/svn/assets/stylesheets/live_validation.css +28 -0
- data/plugins/svn/init.rb +2 -0
- data/plugins/svn/install.rb +1 -0
- data/plugins/svn/lib/form_helpers.rb +49 -0
- data/plugins/svn/lib/live_validations.rb +73 -0
- data/plugins/svn/tasks/live_validation_tasks.rake +17 -0
- data/plugins/svn/test/form_helpers_test.rb +214 -0
- data/plugins/svn/test/live_validations_test.rb +124 -0
- data/plugins/svn/test/resource.rb +17 -0
- data/plugins/svn/uninstall.rb +1 -0
- data/stylesheets/live_validation.css +28 -0
- data/stylesheets/print.css +72 -0
- data/stylesheets/scaffold.css +175 -0
- data/views/accounts/index.rhtml +12 -0
- data/views/accounts/show.rhtml +5 -0
- data/views/admin/_form.rhtml +15 -0
- data/views/admin/add_user.rhtml +21 -0
- data/views/admin/change_pwd.rhtml +23 -0
- data/views/admin/edit_user.rhtml +12 -0
- data/views/admin/index.rhtml +19 -0
- data/views/begin/index.rhtml +0 -0
- data/views/layouts/general.rhtml +59 -0
- data/views/layouts/login.rhtml +18 -0
- data/views/login/change_pwd.rhtml +21 -0
- data/views/login/expired_pwd.rhtml +19 -0
- data/views/login/index.rhtml +15 -0
- data/views/permission/index.rhtml +17 -0
- data/views/permission/relations.rhtml +28 -0
- data/views/permission/roles.rhtml +45 -0
- data/views/permission/tables.rhtml +53 -0
- data/views/roles/_form.rhtml +8 -0
- data/views/roles/edit.rhtml +11 -0
- data/views/roles/list.rhtml +28 -0
- data/views/roles/new.rhtml +8 -0
- data/views/roles/show.rhtml +14 -0
- data/views/shared_views/_advanced_search.rhtml +35 -0
- data/views/shared_views/_child_elements.rhtml +30 -0
- data/views/shared_views/_childs.rhtml +20 -0
- data/views/shared_views/_father_elements.rhtml +27 -0
- data/views/shared_views/_fathers.rhtml +21 -0
- data/views/shared_views/_fathers_header.rhtml +58 -0
- data/views/shared_views/_many_to_many_elements.rhtml +50 -0
- data/views/shared_views/_many_to_manys.rhtml +18 -0
- data/views/shared_views/_one_to_one_elements.rhtml +24 -0
- data/views/shared_views/_one_to_one_father_elements.rhtml +26 -0
- data/views/shared_views/_one_to_ones.rhtml +42 -0
- data/views/shared_views/_one_to_ones_header.rhtml +117 -0
- data/views/shared_views/edit_child.rhtml +89 -0
- data/views/shared_views/edit_many.rhtml +75 -0
- data/views/tables/_cascade.rhtml +10 -0
- data/views/tables/_field.rhtml +10 -0
- data/views/tables/_fk.rhtml +9 -0
- data/views/tables/_form.rhtml +9 -0
- data/views/tables/_join_table_name.rhtml +16 -0
- data/views/tables/_relation_types.rhtml +5 -0
- data/views/tables/_tables.rhtml +15 -0
- data/views/tables/attributes.rhtml +15 -0
- data/views/tables/edit.rhtml +11 -0
- data/views/tables/edit_field.rhtml +18 -0
- data/views/tables/list.rhtml +39 -0
- data/views/tables/new.rhtml +8 -0
- data/views/tables/new_field.rhtml +25 -0
- data/views/tables/relations.rhtml +24 -0
- data/views/tables/show.rhtml +24 -0
- metadata +518 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
require 'optparse'
|
|
2
|
+
|
|
3
|
+
options = { :environment => (ENV['RAILS_ENV'] || "development").dup }
|
|
4
|
+
code_or_file = nil
|
|
5
|
+
|
|
6
|
+
ARGV.clone.options do |opts|
|
|
7
|
+
script_name = File.basename($0)
|
|
8
|
+
opts.banner = "Usage: #{$0} [options] ('Some.ruby(code)' or a filename)"
|
|
9
|
+
|
|
10
|
+
opts.separator ""
|
|
11
|
+
|
|
12
|
+
opts.on("-e", "--environment=name", String,
|
|
13
|
+
"Specifies the environment for the runner to operate under (test/development/production).",
|
|
14
|
+
"Default: development") { |v| options[:environment] = v }
|
|
15
|
+
|
|
16
|
+
opts.separator ""
|
|
17
|
+
|
|
18
|
+
opts.on("-h", "--help",
|
|
19
|
+
"Show this help message.") { $stderr.puts opts; exit }
|
|
20
|
+
|
|
21
|
+
if RUBY_PLATFORM !~ /mswin/
|
|
22
|
+
opts.separator ""
|
|
23
|
+
opts.separator "You can also use runner as a shebang line for your scripts like this:"
|
|
24
|
+
opts.separator "-------------------------------------------------------------"
|
|
25
|
+
opts.separator "#!/usr/bin/env #{File.expand_path($0)}"
|
|
26
|
+
opts.separator ""
|
|
27
|
+
opts.separator "Product.find(:all).each { |p| p.price *= 2 ; p.save! }"
|
|
28
|
+
opts.separator "-------------------------------------------------------------"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
opts.order! { |o| code_or_file ||= o } rescue retry
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
ARGV.delete(code_or_file)
|
|
35
|
+
|
|
36
|
+
ENV["RAILS_ENV"] = options[:environment]
|
|
37
|
+
RAILS_ENV.replace(options[:environment]) if defined?(RAILS_ENV)
|
|
38
|
+
|
|
39
|
+
require RAILS_ROOT + '/config/environment'
|
|
40
|
+
|
|
41
|
+
if code_or_file.nil?
|
|
42
|
+
$stderr.puts "Run '#{$0} -h' for help."
|
|
43
|
+
exit 1
|
|
44
|
+
elsif File.exists?(code_or_file)
|
|
45
|
+
eval(File.read(code_or_file))
|
|
46
|
+
else
|
|
47
|
+
eval(code_or_file)
|
|
48
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require 'active_support'
|
|
2
|
+
require 'fileutils'
|
|
3
|
+
|
|
4
|
+
begin
|
|
5
|
+
require_library_or_gem 'fcgi'
|
|
6
|
+
rescue Exception
|
|
7
|
+
# FCGI not available
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
begin
|
|
11
|
+
require_library_or_gem 'mongrel'
|
|
12
|
+
rescue Exception
|
|
13
|
+
# Mongrel not available
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
server = case ARGV.first
|
|
17
|
+
when "lighttpd", "mongrel", "webrick"
|
|
18
|
+
ARGV.shift
|
|
19
|
+
else
|
|
20
|
+
if defined?(Mongrel)
|
|
21
|
+
"mongrel"
|
|
22
|
+
elsif RUBY_PLATFORM !~ /(:?mswin|mingw)/ && !silence_stderr { `lighttpd -version` }.blank? && defined?(FCGI)
|
|
23
|
+
"lighttpd"
|
|
24
|
+
else
|
|
25
|
+
"webrick"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
case server
|
|
30
|
+
when "webrick"
|
|
31
|
+
puts "=> Booting WEBrick..."
|
|
32
|
+
when "lighttpd"
|
|
33
|
+
puts "=> Booting lighttpd (use 'script/server webrick' to force WEBrick)"
|
|
34
|
+
when "mongrel"
|
|
35
|
+
puts "=> Booting Mongrel (use 'script/server webrick' to force WEBrick)"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
%w(cache pids sessions sockets).each { |dir_to_make| FileUtils.mkdir_p(File.join(RAILS_ROOT, 'tmp', dir_to_make)) }
|
|
39
|
+
require "commands/servers/#{server}"
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
def tail(log_file)
|
|
2
|
+
cursor = File.size(log_file)
|
|
3
|
+
last_checked = Time.now
|
|
4
|
+
tail_thread = Thread.new do
|
|
5
|
+
File.open(log_file, 'r') do |f|
|
|
6
|
+
loop do
|
|
7
|
+
f.seek cursor
|
|
8
|
+
if f.mtime > last_checked
|
|
9
|
+
last_checked = f.mtime
|
|
10
|
+
contents = f.read
|
|
11
|
+
cursor += contents.length
|
|
12
|
+
print contents
|
|
13
|
+
end
|
|
14
|
+
sleep 1
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
tail_thread
|
|
19
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
require 'rbconfig'
|
|
2
|
+
require 'commands/servers/base'
|
|
3
|
+
|
|
4
|
+
unless RUBY_PLATFORM !~ /mswin/ && !silence_stderr { `lighttpd -version` }.blank?
|
|
5
|
+
puts "PROBLEM: Lighttpd is not available on your system (or not in your path)"
|
|
6
|
+
exit 1
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
unless defined?(FCGI)
|
|
10
|
+
puts "PROBLEM: Lighttpd requires that the FCGI Ruby bindings are installed on the system"
|
|
11
|
+
exit 1
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
require 'initializer'
|
|
15
|
+
configuration = Rails::Initializer.run(:initialize_logger).configuration
|
|
16
|
+
default_config_file = config_file = Pathname.new("#{RAILS_ROOT}/config/lighttpd.conf").cleanpath
|
|
17
|
+
|
|
18
|
+
require 'optparse'
|
|
19
|
+
|
|
20
|
+
detach = false
|
|
21
|
+
command_line_port = nil
|
|
22
|
+
|
|
23
|
+
ARGV.options do |opt|
|
|
24
|
+
opt.on("-p", "--port=port", "Changes the server.port number in the config/lighttpd.conf") { |port| command_line_port = port }
|
|
25
|
+
opt.on('-c', "--config=#{config_file}", 'Specify a different lighttpd config file.') { |path| config_file = path }
|
|
26
|
+
opt.on('-h', '--help', 'Show this message.') { puts opt; exit 0 }
|
|
27
|
+
opt.on('-d', '-d', 'Call with -d to detach') { detach = true; puts "=> Configuration in config/lighttpd.conf" }
|
|
28
|
+
opt.parse!
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
unless File.exist?(config_file)
|
|
32
|
+
if config_file != default_config_file
|
|
33
|
+
puts "=> #{config_file} not found."
|
|
34
|
+
exit 1
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
require 'fileutils'
|
|
38
|
+
|
|
39
|
+
source = File.expand_path(File.join(File.dirname(__FILE__),
|
|
40
|
+
"..", "..", "..", "configs", "lighttpd.conf"))
|
|
41
|
+
puts "=> #{config_file} not found, copying from #{source}"
|
|
42
|
+
|
|
43
|
+
FileUtils.cp(source, config_file)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# open the config/lighttpd.conf file and add the current user defined port setting to it
|
|
47
|
+
if command_line_port
|
|
48
|
+
File.open(config_file, 'r+') do |config|
|
|
49
|
+
lines = config.readlines
|
|
50
|
+
|
|
51
|
+
lines.each do |line|
|
|
52
|
+
line.gsub!(/^\s*server.port\s*=\s*(\d+)/, "server.port = #{command_line_port}")
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
config.rewind
|
|
56
|
+
config.print(lines)
|
|
57
|
+
config.truncate(config.pos)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
config = IO.read(config_file)
|
|
62
|
+
default_port, default_ip = 3000, '0.0.0.0'
|
|
63
|
+
port = config.scan(/^\s*server.port\s*=\s*(\d+)/).first rescue default_port
|
|
64
|
+
ip = config.scan(/^\s*server.bind\s*=\s*"([^"]+)"/).first rescue default_ip
|
|
65
|
+
puts "=> Rails application starting on http://#{ip || default_ip}:#{port || default_port}"
|
|
66
|
+
|
|
67
|
+
tail_thread = nil
|
|
68
|
+
|
|
69
|
+
if !detach
|
|
70
|
+
puts "=> Call with -d to detach"
|
|
71
|
+
puts "=> Ctrl-C to shutdown server (see config/lighttpd.conf for options)"
|
|
72
|
+
detach = false
|
|
73
|
+
tail_thread = tail(configuration.log_path)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
trap(:INT) { exit }
|
|
77
|
+
|
|
78
|
+
begin
|
|
79
|
+
`rake tmp:sockets:clear` # Needed if lighttpd crashes or otherwise leaves FCGI sockets around
|
|
80
|
+
`lighttpd #{!detach ? "-D " : ""}-f #{config_file}`
|
|
81
|
+
ensure
|
|
82
|
+
unless detach
|
|
83
|
+
tail_thread.kill if tail_thread
|
|
84
|
+
puts 'Exiting'
|
|
85
|
+
|
|
86
|
+
# Ensure FCGI processes are reaped
|
|
87
|
+
silence_stream(STDOUT) do
|
|
88
|
+
ARGV.replace ['-a', 'kill']
|
|
89
|
+
require 'commands/process/reaper'
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
`rake tmp:sockets:clear` # Remove sockets on clean shutdown
|
|
93
|
+
end
|
|
94
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
require 'rbconfig'
|
|
2
|
+
require 'commands/servers/base'
|
|
3
|
+
|
|
4
|
+
unless defined?(Mongrel)
|
|
5
|
+
puts "PROBLEM: Mongrel is not available on your system (or not in your path)"
|
|
6
|
+
exit 1
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
require 'optparse'
|
|
10
|
+
|
|
11
|
+
OPTIONS = {
|
|
12
|
+
:port => 3000,
|
|
13
|
+
:ip => "0.0.0.0",
|
|
14
|
+
:environment => (ENV['RAILS_ENV'] || "development").dup,
|
|
15
|
+
:detach => false
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
ARGV.clone.options do |opts|
|
|
19
|
+
opts.on("-p", "--port=port", Integer, "Runs Rails on the specified port.", "Default: 3000") { |v| OPTIONS[:port] = v }
|
|
20
|
+
opts.on("-b", "--binding=ip", String, "Binds Rails to the specified ip.", "Default: 0.0.0.0") { |v| OPTIONS[:ip] = v }
|
|
21
|
+
opts.on("-d", "--daemon", "Make server run as a Daemon.") { OPTIONS[:detach] = true }
|
|
22
|
+
opts.on("-e", "--environment=name", String,
|
|
23
|
+
"Specifies the environment to run this server under (test/development/production).",
|
|
24
|
+
"Default: development") { |v| OPTIONS[:environment] = v }
|
|
25
|
+
|
|
26
|
+
opts.separator ""
|
|
27
|
+
|
|
28
|
+
opts.on("-h", "--help", "Show this help message.") { puts opts; exit }
|
|
29
|
+
|
|
30
|
+
opts.parse!
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
puts "=> Rails application starting on http://#{OPTIONS[:ip]}:#{OPTIONS[:port]}"
|
|
34
|
+
|
|
35
|
+
parameters = [
|
|
36
|
+
"start",
|
|
37
|
+
"-p", OPTIONS[:port].to_s,
|
|
38
|
+
"-a", OPTIONS[:ip].to_s,
|
|
39
|
+
"-e", OPTIONS[:environment],
|
|
40
|
+
"-P", "#{RAILS_ROOT}/tmp/pids/mongrel.pid"
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
if OPTIONS[:detach]
|
|
44
|
+
`mongrel_rails #{parameters.join(" ")} -d`
|
|
45
|
+
else
|
|
46
|
+
ENV["RAILS_ENV"] = OPTIONS[:environment]
|
|
47
|
+
RAILS_ENV.replace(OPTIONS[:environment]) if defined?(RAILS_ENV)
|
|
48
|
+
|
|
49
|
+
require 'initializer'
|
|
50
|
+
Rails::Initializer.run(:initialize_logger)
|
|
51
|
+
|
|
52
|
+
puts "=> Call with -d to detach"
|
|
53
|
+
puts "=> Ctrl-C to shutdown server"
|
|
54
|
+
tail_thread = tail(Pathname.new("#{File.expand_path(RAILS_ROOT)}/log/#{RAILS_ENV}.log").cleanpath)
|
|
55
|
+
|
|
56
|
+
trap(:INT) { exit }
|
|
57
|
+
|
|
58
|
+
begin
|
|
59
|
+
silence_warnings { ARGV = parameters }
|
|
60
|
+
load("mongrel_rails")
|
|
61
|
+
ensure
|
|
62
|
+
tail_thread.kill if tail_thread
|
|
63
|
+
puts 'Exiting'
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require 'webrick'
|
|
2
|
+
require 'optparse'
|
|
3
|
+
|
|
4
|
+
OPTIONS = {
|
|
5
|
+
:port => 3000,
|
|
6
|
+
:ip => "0.0.0.0",
|
|
7
|
+
:environment => (ENV['RAILS_ENV'] || "development").dup,
|
|
8
|
+
:server_root => File.expand_path(RAILS_ROOT + "/public/"),
|
|
9
|
+
:server_type => WEBrick::SimpleServer,
|
|
10
|
+
:charset => "UTF-8",
|
|
11
|
+
:mime_types => WEBrick::HTTPUtils::DefaultMimeTypes
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
ARGV.options do |opts|
|
|
15
|
+
script_name = File.basename($0)
|
|
16
|
+
opts.banner = "Usage: ruby #{script_name} [options]"
|
|
17
|
+
|
|
18
|
+
opts.separator ""
|
|
19
|
+
|
|
20
|
+
opts.on("-p", "--port=port", Integer,
|
|
21
|
+
"Runs Rails on the specified port.",
|
|
22
|
+
"Default: 3000") { |v| OPTIONS[:port] = v }
|
|
23
|
+
opts.on("-b", "--binding=ip", String,
|
|
24
|
+
"Binds Rails to the specified ip.",
|
|
25
|
+
"Default: 0.0.0.0") { |v| OPTIONS[:ip] = v }
|
|
26
|
+
opts.on("-e", "--environment=name", String,
|
|
27
|
+
"Specifies the environment to run this server under (test/development/production).",
|
|
28
|
+
"Default: development") { |v| OPTIONS[:environment] = v }
|
|
29
|
+
opts.on("-m", "--mime-types=filename", String,
|
|
30
|
+
"Specifies an Apache style mime.types configuration file to be used for mime types",
|
|
31
|
+
"Default: none") { |mime_types_file| OPTIONS[:mime_types] = WEBrick::HTTPUtils::load_mime_types(mime_types_file) }
|
|
32
|
+
|
|
33
|
+
opts.on("-d", "--daemon",
|
|
34
|
+
"Make Rails run as a Daemon (only works if fork is available -- meaning on *nix)."
|
|
35
|
+
) { OPTIONS[:server_type] = WEBrick::Daemon }
|
|
36
|
+
|
|
37
|
+
opts.on("-c", "--charset=charset", String,
|
|
38
|
+
"Set default charset for output.",
|
|
39
|
+
"Default: UTF-8") { |v| OPTIONS[:charset] = v }
|
|
40
|
+
|
|
41
|
+
opts.separator ""
|
|
42
|
+
|
|
43
|
+
opts.on("-h", "--help",
|
|
44
|
+
"Show this help message.") { puts opts; exit }
|
|
45
|
+
|
|
46
|
+
opts.parse!
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
ENV["RAILS_ENV"] = OPTIONS[:environment]
|
|
50
|
+
RAILS_ENV.replace(OPTIONS[:environment]) if defined?(RAILS_ENV)
|
|
51
|
+
|
|
52
|
+
require RAILS_ROOT + "/config/environment"
|
|
53
|
+
require 'webrick_server'
|
|
54
|
+
|
|
55
|
+
OPTIONS['working_directory'] = File.expand_path(RAILS_ROOT)
|
|
56
|
+
|
|
57
|
+
puts "=> Rails application started on http://#{OPTIONS[:ip]}:#{OPTIONS[:port]}"
|
|
58
|
+
puts "=> Ctrl-C to shutdown server; call with --help for options" if OPTIONS[:server_type] == WEBrick::SimpleServer
|
|
59
|
+
DispatchServlet.dispatch(OPTIONS)
|
data/lib/console_app.rb
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'action_controller/integration'
|
|
2
|
+
|
|
3
|
+
# work around the at_exit hook in test/unit, which kills IRB
|
|
4
|
+
Test::Unit.run = true
|
|
5
|
+
|
|
6
|
+
# reference the global "app" instance, created on demand. To recreate the
|
|
7
|
+
# instance, pass a non-false value as the parameter.
|
|
8
|
+
def app(create=false)
|
|
9
|
+
@app_integration_instance = nil if create
|
|
10
|
+
@app_integration_instance ||= new_session do |sess|
|
|
11
|
+
sess.host! "www.example.com"
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# create a new session. If a block is given, the new session will be yielded
|
|
16
|
+
# to the block before being returned.
|
|
17
|
+
def new_session
|
|
18
|
+
session = ActionController::Integration::Session.new
|
|
19
|
+
yield session if block_given?
|
|
20
|
+
session
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
#reloads the environment
|
|
24
|
+
def reload!
|
|
25
|
+
puts "Reloading..."
|
|
26
|
+
Dispatcher.reset_application!
|
|
27
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
class Module
|
|
2
|
+
def include_all_modules_from(parent_module)
|
|
3
|
+
parent_module.constants.each do |const|
|
|
4
|
+
mod = parent_module.const_get(const)
|
|
5
|
+
if mod.class == Module
|
|
6
|
+
send(:include, mod)
|
|
7
|
+
include_all_modules_from(mod)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def helper
|
|
14
|
+
@helper_proxy ||= Object.new
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
require 'application'
|
|
18
|
+
|
|
19
|
+
class << helper
|
|
20
|
+
include_all_modules_from ActionView
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
@controller = ApplicationController.new
|
data/lib/dispatcher.rb
ADDED
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Copyright (c) 2004-2006 David Heinemeier Hansson
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
#++
|
|
23
|
+
|
|
24
|
+
# This class provides an interface for dispatching a CGI (or CGI-like) request
|
|
25
|
+
# to the appropriate controller and action. It also takes care of resetting
|
|
26
|
+
# the environment (when Dependencies.load? is true) after each request.
|
|
27
|
+
class Dispatcher
|
|
28
|
+
|
|
29
|
+
class << self
|
|
30
|
+
|
|
31
|
+
# Dispatch the given CGI request, using the given session options, and
|
|
32
|
+
# emitting the output via the given output. If you dispatch with your
|
|
33
|
+
# own CGI object be sure to handle the exceptions it raises on multipart
|
|
34
|
+
# requests (EOFError and ArgumentError).
|
|
35
|
+
def dispatch(cgi = nil, session_options = ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS, output = $stdout)
|
|
36
|
+
controller = nil
|
|
37
|
+
if cgi ||= new_cgi(output)
|
|
38
|
+
request, response = ActionController::CgiRequest.new(cgi, session_options), ActionController::CgiResponse.new(cgi)
|
|
39
|
+
prepare_application
|
|
40
|
+
controller = ActionController::Routing::Routes.recognize(request)
|
|
41
|
+
controller.process(request, response).out(output)
|
|
42
|
+
end
|
|
43
|
+
rescue Exception => exception # errors from CGI dispatch
|
|
44
|
+
failsafe_response(output, '500 Internal Server Error', exception) do
|
|
45
|
+
controller ||= ApplicationController rescue LoadError nil
|
|
46
|
+
controller ||= ActionController::Base
|
|
47
|
+
controller.process_with_exception(request, response, exception).out(output)
|
|
48
|
+
end
|
|
49
|
+
ensure
|
|
50
|
+
# Do not give a failsafe response here.
|
|
51
|
+
reset_after_dispatch
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Reset the application by clearing out loaded controllers, views, actions,
|
|
55
|
+
# mailers, and so forth. This allows them to be loaded again without having
|
|
56
|
+
# to restart the server (WEBrick, FastCGI, etc.).
|
|
57
|
+
def reset_application!
|
|
58
|
+
ActiveRecord::Base.reset_subclasses if defined?(ActiveRecord)
|
|
59
|
+
|
|
60
|
+
Dependencies.clear
|
|
61
|
+
ActiveSupport::Deprecation.silence do # TODO: Remove after 1.2
|
|
62
|
+
Class.remove_class(*Reloadable.reloadable_classes)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
ActiveRecord::Base.clear_reloadable_connections! if defined?(ActiveRecord)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Add a preparation callback. Preparation callbacks are run before every
|
|
69
|
+
# request in development mode, and before the first request in production
|
|
70
|
+
# mode.
|
|
71
|
+
#
|
|
72
|
+
# An optional identifier may be supplied for the callback. If provided,
|
|
73
|
+
# to_prepare may be called again with the same identifier to replace the
|
|
74
|
+
# existing callback. Passing an identifier is a suggested practice if the
|
|
75
|
+
# code adding a preparation block may be reloaded.
|
|
76
|
+
def to_prepare(identifier = nil, &block)
|
|
77
|
+
unless identifier.nil?
|
|
78
|
+
callback = preparation_callbacks.detect { |ident, _| ident == identifier }
|
|
79
|
+
|
|
80
|
+
if callback # Already registered: update the existing callback
|
|
81
|
+
callback[-1] = block
|
|
82
|
+
return
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
preparation_callbacks << [identifier, block]
|
|
87
|
+
|
|
88
|
+
return
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
private
|
|
92
|
+
|
|
93
|
+
attr_accessor :preparation_callbacks, :preparation_callbacks_run
|
|
94
|
+
alias_method :preparation_callbacks_run?, :preparation_callbacks_run
|
|
95
|
+
|
|
96
|
+
# CGI.new plus exception handling. CGI#read_multipart raises EOFError
|
|
97
|
+
# if body.empty? or body.size != Content-Length and raises ArgumentError
|
|
98
|
+
# if Content-Length is non-integer.
|
|
99
|
+
def new_cgi(output)
|
|
100
|
+
failsafe_response(output, '400 Bad Request') { CGI.new }
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def prepare_application
|
|
104
|
+
if Dependencies.load?
|
|
105
|
+
ActionController::Routing::Routes.reload
|
|
106
|
+
self.preparation_callbacks_run = false
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
prepare_breakpoint
|
|
110
|
+
require_dependency 'application' unless Object.const_defined?(:ApplicationController)
|
|
111
|
+
ActiveRecord::Base.verify_active_connections! if defined?(ActiveRecord)
|
|
112
|
+
run_preparation_callbacks
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def reset_after_dispatch
|
|
116
|
+
reset_application! if Dependencies.load?
|
|
117
|
+
Breakpoint.deactivate_drb if defined?(BREAKPOINT_SERVER_PORT)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def prepare_breakpoint
|
|
121
|
+
return unless defined?(BREAKPOINT_SERVER_PORT)
|
|
122
|
+
require 'breakpoint'
|
|
123
|
+
Breakpoint.activate_drb("druby://localhost:#{BREAKPOINT_SERVER_PORT}", nil, !defined?(FastCGI))
|
|
124
|
+
true
|
|
125
|
+
rescue
|
|
126
|
+
nil
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def run_preparation_callbacks
|
|
130
|
+
return if preparation_callbacks_run?
|
|
131
|
+
preparation_callbacks.each { |_, callback| callback.call }
|
|
132
|
+
self.preparation_callbacks_run = true
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# If the block raises, send status code as a last-ditch response.
|
|
136
|
+
def failsafe_response(output, status, exception = nil)
|
|
137
|
+
yield
|
|
138
|
+
rescue Exception # errors from executed block
|
|
139
|
+
begin
|
|
140
|
+
output.write "Status: #{status}\r\n"
|
|
141
|
+
|
|
142
|
+
if exception
|
|
143
|
+
message = exception.to_s + "\r\n" + exception.backtrace.join("\r\n")
|
|
144
|
+
error_path = File.join(RAILS_ROOT, 'public', '500.html')
|
|
145
|
+
|
|
146
|
+
if defined?(RAILS_DEFAULT_LOGGER) && !RAILS_DEFAULT_LOGGER.nil?
|
|
147
|
+
RAILS_DEFAULT_LOGGER.fatal(message)
|
|
148
|
+
|
|
149
|
+
output.write "Content-Type: text/html\r\n\r\n"
|
|
150
|
+
|
|
151
|
+
if File.exists?(error_path)
|
|
152
|
+
output.write(IO.read(error_path))
|
|
153
|
+
else
|
|
154
|
+
output.write("<html><body><h1>Application error (Rails)</h1></body></html>")
|
|
155
|
+
end
|
|
156
|
+
else
|
|
157
|
+
output.write "Content-Type: text/plain\r\n\r\n"
|
|
158
|
+
output.write(message)
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
rescue Exception # Logger or IO errors
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
self.preparation_callbacks = []
|
|
167
|
+
self.preparation_callbacks_run = false
|
|
168
|
+
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
Dispatcher.to_prepare :activerecord_instantiate_observers do
|
|
172
|
+
ActiveRecord::Base.instantiate_observers
|
|
173
|
+
end if defined?(ActiveRecord)
|