merb 0.5.3 → 0.9.2
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/LICENSE +0 -20
- data/README +0 -277
- data/Rakefile +80 -199
- data/TODO +0 -3
- metadata +19 -438
- data/SVN_REVISION +0 -1
- data/app_generators/merb/USAGE +0 -5
- data/app_generators/merb/merb_generator.rb +0 -108
- data/app_generators/merb/templates/Rakefile +0 -124
- data/app_generators/merb/templates/app/controllers/application.rb +0 -3
- data/app_generators/merb/templates/app/controllers/exceptions.rb +0 -13
- data/app_generators/merb/templates/app/helpers/global_helper.rb +0 -5
- data/app_generators/merb/templates/app/mailers/views/layout/application.html.erb +0 -1
- data/app_generators/merb/templates/app/mailers/views/layout/application.text.erb +0 -1
- data/app_generators/merb/templates/app/parts/views/layout/application.html.erb +0 -1
- data/app_generators/merb/templates/app/views/exceptions/internal_server_error.html.erb +0 -216
- data/app_generators/merb/templates/app/views/exceptions/not_acceptable.html.erb +0 -38
- data/app_generators/merb/templates/app/views/exceptions/not_found.html.erb +0 -40
- data/app_generators/merb/templates/app/views/layout/application.html.erb +0 -11
- data/app_generators/merb/templates/config/boot.rb +0 -11
- data/app_generators/merb/templates/config/dependencies.rb +0 -41
- data/app_generators/merb/templates/config/environments/development.rb +0 -1
- data/app_generators/merb/templates/config/environments/production.rb +0 -1
- data/app_generators/merb/templates/config/environments/test.rb +0 -1
- data/app_generators/merb/templates/config/merb.yml +0 -82
- data/app_generators/merb/templates/config/merb_init.rb +0 -17
- data/app_generators/merb/templates/config/plugins.yml +0 -1
- data/app_generators/merb/templates/config/router.rb +0 -35
- data/app_generators/merb/templates/config/upload.conf +0 -0
- data/app_generators/merb/templates/public/images/merb.jpg +0 -0
- data/app_generators/merb/templates/public/merb.fcgi +0 -6
- data/app_generators/merb/templates/public/stylesheets/master.css +0 -119
- data/app_generators/merb/templates/script/destroy +0 -32
- data/app_generators/merb/templates/script/generate +0 -32
- data/app_generators/merb/templates/script/stop_merb +0 -13
- data/app_generators/merb/templates/script/win_script.cmd +0 -1
- data/app_generators/merb/templates/spec/spec.opts +0 -6
- data/app_generators/merb/templates/spec/spec_helper.rb +0 -15
- data/app_generators/merb/templates/test/test_helper.rb +0 -14
- data/app_generators/merb_plugin/USAGE +0 -5
- data/app_generators/merb_plugin/merb_plugin_generator.rb +0 -68
- data/app_generators/merb_plugin/templates/LICENSE +0 -20
- data/app_generators/merb_plugin/templates/README +0 -4
- data/app_generators/merb_plugin/templates/Rakefile +0 -35
- data/app_generators/merb_plugin/templates/TODO +0 -5
- data/app_generators/merb_plugin/templates/merbtasks.rb +0 -6
- data/app_generators/merb_plugin/templates/sampleplugin.rb +0 -10
- data/app_generators/merb_plugin/templates/sampleplugin_spec.rb +0 -7
- data/app_generators/merb_plugin/templates/spec_helper.rb +0 -2
- data/bin/merb +0 -4
- data/lib/autotest/discover.rb +0 -3
- data/lib/autotest/merb_rspec.rb +0 -80
- data/lib/merb.rb +0 -188
- data/lib/merb/abstract_controller.rb +0 -399
- data/lib/merb/assets.rb +0 -160
- data/lib/merb/assets.rb.orig +0 -119
- data/lib/merb/boot_loader.rb +0 -286
- data/lib/merb/boot_loader.rb.orig +0 -235
- data/lib/merb/caching.rb +0 -5
- data/lib/merb/caching/action_cache.rb +0 -92
- data/lib/merb/caching/fragment_cache.rb +0 -39
- data/lib/merb/caching/store/file_cache.rb +0 -90
- data/lib/merb/caching/store/memory_cache.rb +0 -85
- data/lib/merb/config.rb +0 -290
- data/lib/merb/constants.rb +0 -50
- data/lib/merb/controller.rb +0 -220
- data/lib/merb/cookies.rb +0 -95
- data/lib/merb/core_ext.rb +0 -15
- data/lib/merb/core_ext/array.rb +0 -0
- data/lib/merb/core_ext/class.rb +0 -180
- data/lib/merb/core_ext/enumerable.rb +0 -49
- data/lib/merb/core_ext/get_args.rb +0 -76
- data/lib/merb/core_ext/hash.rb +0 -306
- data/lib/merb/core_ext/inflections.rb +0 -112
- data/lib/merb/core_ext/inflector.rb +0 -275
- data/lib/merb/core_ext/kernel.rb +0 -242
- data/lib/merb/core_ext/mash.rb +0 -88
- data/lib/merb/core_ext/module.rb +0 -67
- data/lib/merb/core_ext/numeric.rb +0 -72
- data/lib/merb/core_ext/object.rb +0 -183
- data/lib/merb/core_ext/string.rb +0 -53
- data/lib/merb/core_ext/symbol.rb +0 -6
- data/lib/merb/dispatcher.rb +0 -109
- data/lib/merb/drb_server.rb +0 -19
- data/lib/merb/erubis_ext.rb +0 -10
- data/lib/merb/exceptions.rb +0 -192
- data/lib/merb/generators/merb_app/merb_app.rb +0 -22
- data/lib/merb/generators/merb_generator_helpers.rb +0 -318
- data/lib/merb/generators/merb_plugin.rb +0 -22
- data/lib/merb/logger.rb +0 -78
- data/lib/merb/mail_controller.rb +0 -268
- data/lib/merb/mailer.rb +0 -87
- data/lib/merb/mixins/basic_authentication.rb +0 -35
- data/lib/merb/mixins/controller.rb +0 -160
- data/lib/merb/mixins/erubis_capture.rb +0 -68
- data/lib/merb/mixins/general_controller.rb +0 -253
- data/lib/merb/mixins/inline_partial.rb +0 -32
- data/lib/merb/mixins/render.rb +0 -465
- data/lib/merb/mixins/responder.rb +0 -449
- data/lib/merb/mixins/view_context.rb +0 -558
- data/lib/merb/mixins/web_controller.rb +0 -36
- data/lib/merb/mongrel_handler.rb +0 -168
- data/lib/merb/part_controller.rb +0 -29
- data/lib/merb/plugins.rb +0 -16
- data/lib/merb/rack_adapter.rb +0 -37
- data/lib/merb/request.rb +0 -465
- data/lib/merb/router.rb +0 -646
- data/lib/merb/server.rb +0 -169
- data/lib/merb/session.rb +0 -23
- data/lib/merb/session/cookie_store.rb +0 -118
- data/lib/merb/session/mem_cache_session.rb +0 -131
- data/lib/merb/session/memory_session.rb +0 -176
- data/lib/merb/template.rb +0 -37
- data/lib/merb/template/erubis.rb +0 -68
- data/lib/merb/template/haml.rb +0 -87
- data/lib/merb/template/markaby.rb +0 -59
- data/lib/merb/template/xml_builder.rb +0 -50
- data/lib/merb/test/fake_request.rb +0 -74
- data/lib/merb/test/helper.rb +0 -260
- data/lib/merb/test/hpricot.rb +0 -136
- data/lib/merb/test/multipart.rb +0 -66
- data/lib/merb/test/rspec.rb +0 -18
- data/lib/merb/test/rspec_matchers/controller_matchers.rb +0 -117
- data/lib/merb/test/rspec_matchers/markup_matchers.rb +0 -98
- data/lib/merb/upload_handler.rb +0 -80
- data/lib/merb/upload_progress.rb +0 -48
- data/lib/merb/version.rb +0 -49
- data/lib/merb/view_context.rb +0 -79
- data/lib/tasks.rb +0 -7
- data/lib/tasks/merb.rake +0 -54
- data/merb_default_generators/model/USAGE +0 -0
- data/merb_default_generators/model/model_generator.rb +0 -16
- data/merb_default_generators/model/templates/new_model_template.erb +0 -5
- data/merb_default_generators/resource_controller/USAGE +0 -0
- data/merb_default_generators/resource_controller/resource_controller_generator.rb +0 -26
- data/merb_default_generators/resource_controller/templates/controller.rb +0 -30
- data/merb_default_generators/resource_controller/templates/edit.html.erb +0 -1
- data/merb_default_generators/resource_controller/templates/helper.rb +0 -5
- data/merb_default_generators/resource_controller/templates/index.html.erb +0 -1
- data/merb_default_generators/resource_controller/templates/new.html.erb +0 -1
- data/merb_default_generators/resource_controller/templates/show.html.erb +0 -1
- data/merb_generators/controller/USAGE +0 -5
- data/merb_generators/controller/controller_generator.rb +0 -16
- data/merb_generators/controller/templates/controller.rb +0 -8
- data/merb_generators/controller/templates/helper.rb +0 -5
- data/merb_generators/controller/templates/index.html.erb +0 -3
- data/merb_generators/part_controller/USAGE +0 -5
- data/merb_generators/part_controller/part_controller_generator.rb +0 -27
- data/merb_generators/part_controller/templates/controller.rb +0 -8
- data/merb_generators/part_controller/templates/helper.rb +0 -5
- data/merb_generators/part_controller/templates/index.html.erb +0 -3
- data/merb_generators/resource/USAGE +0 -0
- data/merb_generators/resource/resource_generator.rb +0 -67
- data/rspec_generators/merb_controller_test/merb_controller_test_generator.rb +0 -67
- data/rspec_generators/merb_controller_test/templates/controller_spec.rb +0 -8
- data/rspec_generators/merb_controller_test/templates/edit_spec.rb +0 -12
- data/rspec_generators/merb_controller_test/templates/helper_spec.rb +0 -5
- data/rspec_generators/merb_controller_test/templates/index_spec.rb +0 -12
- data/rspec_generators/merb_controller_test/templates/new_spec.rb +0 -12
- data/rspec_generators/merb_controller_test/templates/show_spec.rb +0 -5
- data/rspec_generators/merb_model_test/merb_model_test_generator.rb +0 -26
- data/rspec_generators/merb_model_test/templates/model_spec_template.erb +0 -7
- data/script/destroy +0 -14
- data/script/generate +0 -14
- data/spec/fixtures/config/environments/environment_config_test.yml +0 -1
- data/spec/fixtures/config/merb.yml +0 -18
- data/spec/fixtures/controllers/dispatch_spec_controllers.rb +0 -235
- data/spec/fixtures/controllers/render_spec_controllers.rb +0 -184
- data/spec/fixtures/foo.rb +0 -3
- data/spec/fixtures/mailers/views/layout/application.html.erb +0 -3
- data/spec/fixtures/mailers/views/layout/application.text.erb +0 -3
- data/spec/fixtures/mailers/views/test_mail_controller/eighth.html.erb +0 -1
- data/spec/fixtures/mailers/views/test_mail_controller/eighth.text.erb +0 -1
- data/spec/fixtures/mailers/views/test_mail_controller/first.html.erb +0 -1
- data/spec/fixtures/mailers/views/test_mail_controller/first.text.erb +0 -1
- data/spec/fixtures/mailers/views/test_mail_controller/ninth.html.erb +0 -1
- data/spec/fixtures/mailers/views/test_mail_controller/ninth.text.erb +0 -1
- data/spec/fixtures/mailers/views/test_mail_controller/second.text.erb +0 -1
- data/spec/fixtures/mailers/views/test_mail_controller/third.html.erb +0 -1
- data/spec/fixtures/models/router_spec_models.rb +0 -30
- data/spec/fixtures/parts/views/layout/todo_part.html.erb +0 -3
- data/spec/fixtures/parts/views/layout/todo_part.xml.erb +0 -3
- data/spec/fixtures/parts/views/todo_part/formatted_output.html.erb +0 -1
- data/spec/fixtures/parts/views/todo_part/formatted_output.js.erb +0 -1
- data/spec/fixtures/parts/views/todo_part/formatted_output.xml.erb +0 -1
- data/spec/fixtures/parts/views/todo_part/list.html.erb +0 -3
- data/spec/fixtures/sample.txt +0 -1
- data/spec/fixtures/views/erubis.html.erb +0 -1
- data/spec/fixtures/views/examples/_erubis.html.erb +0 -1
- data/spec/fixtures/views/examples/_haml.html.haml +0 -1
- data/spec/fixtures/views/examples/_markaby.html.mab +0 -1
- data/spec/fixtures/views/examples/_throw_content.html.erb +0 -6
- data/spec/fixtures/views/examples/hello.xml.builder +0 -1
- data/spec/fixtures/views/examples/js.js.erb +0 -1
- data/spec/fixtures/views/examples/template_catch_content.html.erb +0 -15
- data/spec/fixtures/views/examples/template_catch_content_from_partial.html.erb +0 -6
- data/spec/fixtures/views/examples/template_throw_content.html.erb +0 -10
- data/spec/fixtures/views/examples/template_throw_content_without_block.html.erb +0 -3
- data/spec/fixtures/views/exceptions/admin_access_required.html.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/_nested_js.js.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/_nested_xml.xml.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/_render_partial_multiple_times.html.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/erubis_templates.html.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/erubis_templates.js.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/erubis_templates.rhtml +0 -1
- data/spec/fixtures/views/extension_template_controller/erubis_templates.xml.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/haml_index.html.haml +0 -0
- data/spec/fixtures/views/extension_template_controller/haml_templates.html.haml +0 -1
- data/spec/fixtures/views/extension_template_controller/haml_templates.js.haml +0 -1
- data/spec/fixtures/views/extension_template_controller/haml_templates.xml.haml +0 -1
- data/spec/fixtures/views/extension_template_controller/index.html.erb +0 -0
- data/spec/fixtures/views/extension_template_controller/markaby_index.html.mab +0 -0
- data/spec/fixtures/views/extension_template_controller/markaby_templates.html.mab +0 -1
- data/spec/fixtures/views/extension_template_controller/markaby_templates.js.mab +0 -1
- data/spec/fixtures/views/extension_template_controller/markaby_templates.xml.mab +0 -1
- data/spec/fixtures/views/extension_template_controller/render_multiple_partials.html.erb +0 -4
- data/spec/fixtures/views/extension_template_controller/render_nested_js.js.erb +0 -1
- data/spec/fixtures/views/extension_template_controller/render_nested_xml.xml.erb +0 -1
- data/spec/fixtures/views/haml.html.haml +0 -1
- data/spec/fixtures/views/haml.xml.haml +0 -2
- data/spec/fixtures/views/layout/application.html.erb +0 -1
- data/spec/fixtures/views/layout/application.xml.erb +0 -1
- data/spec/fixtures/views/layout/nested/example.html.erb +0 -1
- data/spec/fixtures/views/markaby.html.mab +0 -1
- data/spec/fixtures/views/nested/example/test.html.erb +0 -1
- data/spec/fixtures/views/partials/_erubis.html.erb +0 -1
- data/spec/fixtures/views/partials/_erubis_collection.html.erb +0 -1
- data/spec/fixtures/views/partials/_erubis_collection_with_locals.html.erb +0 -1
- data/spec/fixtures/views/partials/_erubis_new.html.erb +0 -1
- data/spec/fixtures/views/partials/_haml.html.haml +0 -1
- data/spec/fixtures/views/partials/_haml_collection.html.haml +0 -1
- data/spec/fixtures/views/partials/_haml_collection_with_locals.html.haml +0 -1
- data/spec/fixtures/views/partials/_haml_new.html.haml +0 -1
- data/spec/fixtures/views/partials/_markaby.html.mab +0 -1
- data/spec/fixtures/views/partials/_markaby_collection.html.mab +0 -1
- data/spec/fixtures/views/partials/_markaby_collection_with_locals.html.mab +0 -1
- data/spec/fixtures/views/partials/_markaby_new.html.mab +0 -1
- data/spec/fixtures/views/render_object_controller/render_object_with_template.html.erb +0 -1
- data/spec/fixtures/views/render_object_controller/render_object_with_template.js.erb +0 -1
- data/spec/fixtures/views/render_object_controller/render_object_with_template.xml.erb +0 -1
- data/spec/fixtures/views/template_views/interface__buffer_erubis.html.erb +0 -4
- data/spec/fixtures/views/template_views/interface__buffer_haml.html.haml +0 -7
- data/spec/fixtures/views/template_views/interface__buffer_markaby.html.mab +0 -7
- data/spec/fixtures/views/template_views/interface_capture_erubis.html.erb +0 -15
- data/spec/fixtures/views/template_views/interface_capture_haml.html.haml +0 -15
- data/spec/fixtures/views/template_views/interface_capture_markaby.html.mab +0 -4
- data/spec/fixtures/views/template_views/interface_concat_erubis.html.erb +0 -12
- data/spec/fixtures/views/template_views/interface_concat_haml.html.haml +0 -11
- data/spec/fixtures/views/template_views/interface_concat_markaby.html.mab +0 -14
- data/spec/fixtures/views/test.dir/the_template.html.erb +0 -1
- data/spec/merb/abstract_controller_spec.rb +0 -38
- data/spec/merb/assets_spec.rb +0 -207
- data/spec/merb/caching_spec.rb +0 -102
- data/spec/merb/config_spec.rb +0 -29
- data/spec/merb/controller_filters_spec.rb +0 -253
- data/spec/merb/controller_spec.rb +0 -126
- data/spec/merb/cookie_store_spec.rb +0 -72
- data/spec/merb/cookies_spec.rb +0 -96
- data/spec/merb/core_ext/class_spec.rb +0 -97
- data/spec/merb/core_ext/enumerable_spec.rb +0 -27
- data/spec/merb/core_ext/hash_spec.rb +0 -251
- data/spec/merb/core_ext/inflector_spec.rb +0 -34
- data/spec/merb/core_ext/kernel_spec.rb +0 -25
- data/spec/merb/core_ext/numeric_spec.rb +0 -26
- data/spec/merb/core_ext/object_spec.rb +0 -47
- data/spec/merb/core_ext/string_spec.rb +0 -22
- data/spec/merb/core_ext/symbol_spec.rb +0 -7
- data/spec/merb/dependency_spec.rb +0 -22
- data/spec/merb/dispatch_spec.rb +0 -528
- data/spec/merb/fake_request_spec.rb +0 -80
- data/spec/merb/generator_spec.rb +0 -248
- data/spec/merb/handler_spec.rb +0 -169
- data/spec/merb/mail_controller_spec.rb +0 -177
- data/spec/merb/mailer_spec.rb +0 -87
- data/spec/merb/multipart_spec.rb +0 -50
- data/spec/merb/part_controller_spec.rb +0 -124
- data/spec/merb/plugins_spec.rb +0 -80
- data/spec/merb/render_spec.rb +0 -469
- data/spec/merb/request_spec.rb +0 -287
- data/spec/merb/responder_spec.rb +0 -562
- data/spec/merb/router_spec.rb +0 -900
- data/spec/merb/server_spec.rb +0 -19
- data/spec/merb/template_spec.rb +0 -41
- data/spec/merb/upload_handler_spec.rb +0 -108
- data/spec/merb/version_spec.rb +0 -33
- data/spec/merb/view_context_spec.rb +0 -366
- data/spec/spec_generator_helper.rb +0 -34
- data/spec/spec_helper.rb +0 -101
- data/spec/spec_helpers/url_shared_behaviour.rb +0 -112
- data/test_unit_generators/merb_controller_test/merb_controller_test_generator.rb +0 -53
- data/test_unit_generators/merb_controller_test/templates/functional_test.rb +0 -17
- data/test_unit_generators/merb_controller_test/templates/helper_test.rb +0 -9
- data/test_unit_generators/merb_model_test/merb_model_test_generator.rb +0 -29
- data/test_unit_generators/merb_model_test/templates/model_test_unit_template.erb +0 -9
data/lib/merb/server.rb
DELETED
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
require 'rubygems'
|
|
2
|
-
|
|
3
|
-
# Make the app's "gems" directory a place where gems are loaded from
|
|
4
|
-
# This needs to go here for using in a shared envirionment where Erubis may not
|
|
5
|
-
# be available
|
|
6
|
-
if File.exists?(File.join(Dir.pwd, "gems")) && File.directory?(File.join(Dir.pwd,"gems"))
|
|
7
|
-
Gem.clear_paths
|
|
8
|
-
Gem.path.unshift(File.join(Dir.pwd,"gems"))
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
require 'optparse'
|
|
13
|
-
require 'ostruct'
|
|
14
|
-
require 'fileutils'
|
|
15
|
-
require 'yaml'
|
|
16
|
-
|
|
17
|
-
# this is so we can test for HAML features for HAML partial inlining
|
|
18
|
-
unless Gem.cache.search("haml").empty?
|
|
19
|
-
gem "haml"
|
|
20
|
-
require "haml"
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
require File.join(File.dirname(__FILE__), 'config')
|
|
24
|
-
|
|
25
|
-
module Merb
|
|
26
|
-
|
|
27
|
-
class Server
|
|
28
|
-
|
|
29
|
-
class << self
|
|
30
|
-
|
|
31
|
-
def run
|
|
32
|
-
::Merb::Config.parse_args
|
|
33
|
-
|
|
34
|
-
if Merb::Config[:cluster]
|
|
35
|
-
Merb::Config[:port].to_i.upto(Merb::Config[:port].to_i+Merb::Config[:cluster].to_i-1) do |port|
|
|
36
|
-
unless alive?(port)
|
|
37
|
-
delete_pidfiles(port)
|
|
38
|
-
puts "Starting merb server on port: #{port}"
|
|
39
|
-
start(port)
|
|
40
|
-
else
|
|
41
|
-
raise "Merb is already running on port: #{port}"
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
elsif Merb::Config[:daemonize]
|
|
45
|
-
unless alive?(Merb::Config[:port])
|
|
46
|
-
delete_pidfiles(Merb::Config[:port])
|
|
47
|
-
start(Merb::Config[:port])
|
|
48
|
-
else
|
|
49
|
-
raise "Merb is already running on port: #{port}"
|
|
50
|
-
end
|
|
51
|
-
else
|
|
52
|
-
trap('TERM') { exit }
|
|
53
|
-
mongrel_start(Merb::Config[:port])
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def store_pid(pid,port)
|
|
59
|
-
File.open("#{Merb::Config[:merb_root]}/log/merb.#{port}.pid", 'w'){|f| f.write("#{Process.pid}\n")}
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def alive?(port)
|
|
63
|
-
f = Merb::Config[:merb_root] + "/log/merb.#{port}.pid"
|
|
64
|
-
pid = IO.read(f).chomp.to_i
|
|
65
|
-
Process.kill(0, pid)
|
|
66
|
-
true
|
|
67
|
-
rescue
|
|
68
|
-
false
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def kill(ports, sig=9)
|
|
72
|
-
begin
|
|
73
|
-
Dir[Merb::Config[:merb_root] + "/log/merb.#{ports == 'all' ? '*' : ports }.pid"].each do |f|
|
|
74
|
-
pid = IO.read(f).chomp.to_i
|
|
75
|
-
Process.kill(sig, pid)
|
|
76
|
-
FileUtils.rm f
|
|
77
|
-
puts "killed PID #{pid} with signal #{sig}"
|
|
78
|
-
end
|
|
79
|
-
rescue
|
|
80
|
-
puts "Failed to kill! #{k}"
|
|
81
|
-
ensure
|
|
82
|
-
exit
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
def start(port,what=:mongrel_start)
|
|
87
|
-
fork do
|
|
88
|
-
Process.setsid
|
|
89
|
-
exit if fork
|
|
90
|
-
File.umask 0000
|
|
91
|
-
STDIN.reopen "/dev/null"
|
|
92
|
-
STDOUT.reopen "/dev/null", "a"
|
|
93
|
-
STDERR.reopen STDOUT
|
|
94
|
-
trap("TERM") { exit }
|
|
95
|
-
Dir.chdir Merb::Config[:merb_root]
|
|
96
|
-
send(what, port)
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
def webrick_start(port)
|
|
101
|
-
Merb::BootLoader.initialize_merb
|
|
102
|
-
store_pid(Process.pid, port)
|
|
103
|
-
require 'rack'
|
|
104
|
-
require 'merb/rack_adapter'
|
|
105
|
-
::Rack::Handler::WEBrick.run Merb::Rack::Adapter.new,
|
|
106
|
-
:Port => port
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
def fastcgi_start
|
|
110
|
-
Merb::BootLoader.initialize_merb
|
|
111
|
-
require 'rack'
|
|
112
|
-
require 'merb/rack_adapter'
|
|
113
|
-
::Rack::Handler::FastCGI.run Merb::Rack::Adapter.new
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
def delete_pidfiles(portor_star='*')
|
|
117
|
-
Dir["#{Merb::Config[:merb_root]}/log/merb.#{portor_star}.pid"].each do |pid|
|
|
118
|
-
FileUtils.rm(pid) rescue nil
|
|
119
|
-
end
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
def drbserver_start(port)
|
|
123
|
-
puts "Starting merb drb server on port: #{port}"
|
|
124
|
-
require 'merb/drb_server'
|
|
125
|
-
Merb::BootLoader.initialize_merb
|
|
126
|
-
store_pid(Process.pid, "drb.#{port}")
|
|
127
|
-
drb_init = File.join(Merb.root, "/config/drb_init")
|
|
128
|
-
require drb_init if File.exist?(drb_init)
|
|
129
|
-
DRb.start_service("druby://#{Merb::Config[:host]}:#{port}", Merb::DrbServiceProvider)
|
|
130
|
-
DRb.thread.join
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
def mongrel_start(port)
|
|
134
|
-
store_pid(Process.pid, port)
|
|
135
|
-
Merb::Config[:port] = port
|
|
136
|
-
unless Merb::Config[:generate] || Merb::Config[:console] || Merb::Config[:only_drb] || Merb::Config[:kill]
|
|
137
|
-
puts %{Merb started with these options:}
|
|
138
|
-
puts Merb::Config.to_yaml; puts
|
|
139
|
-
end
|
|
140
|
-
Merb::BootLoader.initialize_merb
|
|
141
|
-
|
|
142
|
-
mconf_hash = {:host => (Merb::Config[:host]||"0.0.0.0"), :port => (port ||4000)}
|
|
143
|
-
if Merb::Config[:user] and Merb::Config[:group]
|
|
144
|
-
mconf_hash[:user] = Merb::Config[:user]
|
|
145
|
-
mconf_hash[:group] = Merb::Config[:group]
|
|
146
|
-
end
|
|
147
|
-
mconfig = Mongrel::Configurator.new(mconf_hash) do
|
|
148
|
-
listener do
|
|
149
|
-
uri( "/", :handler => MerbUploadHandler.new(Merb::Config), :in_front => true) if Merb::Config[:upload_path_match]
|
|
150
|
-
uri "/", :handler => MerbHandler.new(Merb.root+'/public', Merb::Config[:mongrel_x_sendfile])
|
|
151
|
-
uri "/favicon.ico", :handler => Mongrel::Error404Handler.new("")
|
|
152
|
-
end
|
|
153
|
-
MerbHandler.path_prefix = Merb::Config[:path_prefix]
|
|
154
|
-
|
|
155
|
-
trap("INT") { stop }
|
|
156
|
-
run
|
|
157
|
-
end
|
|
158
|
-
mconfig.join
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
def config
|
|
162
|
-
Merb::Config
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
end # class << self
|
|
166
|
-
|
|
167
|
-
end # Server
|
|
168
|
-
|
|
169
|
-
end # Merb
|
data/lib/merb/session.rb
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
module Merb
|
|
2
|
-
module SessionMixin
|
|
3
|
-
|
|
4
|
-
def rand_uuid
|
|
5
|
-
values = [
|
|
6
|
-
rand(0x0010000),
|
|
7
|
-
rand(0x0010000),
|
|
8
|
-
rand(0x0010000),
|
|
9
|
-
rand(0x0010000),
|
|
10
|
-
rand(0x0010000),
|
|
11
|
-
rand(0x1000000),
|
|
12
|
-
rand(0x1000000),
|
|
13
|
-
]
|
|
14
|
-
"%04x%04x%04x%04x%04x%06x%06x" % values
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def needs_new_cookie!
|
|
18
|
-
@_new_cookie = true
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
module_function :rand_uuid, :needs_new_cookie!
|
|
22
|
-
end
|
|
23
|
-
end
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
require 'base64' # to convert Marshal.dump to ASCII
|
|
2
|
-
require 'openssl' # to generate the HMAC message digest
|
|
3
|
-
|
|
4
|
-
# Most of this code is taken from bitsweat's implementation in rails
|
|
5
|
-
|
|
6
|
-
module Merb
|
|
7
|
-
|
|
8
|
-
module SessionMixin #:nodoc:
|
|
9
|
-
def setup_session
|
|
10
|
-
Merb.logger.info("Setting Up Cookie Store Sessions")
|
|
11
|
-
request.session = Merb::CookieStore.new(cookies[_session_id_key], session_secret_key)
|
|
12
|
-
@original_session = request.session.read_cookie
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def finalize_session
|
|
16
|
-
Merb.logger.info("Finalize Cookie Store Session")
|
|
17
|
-
new_session = request.session.read_cookie
|
|
18
|
-
|
|
19
|
-
if @original_session != new_session
|
|
20
|
-
set_cookie(_session_id_key, new_session, _session_expiry)
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def session_store_type
|
|
25
|
-
"cookie"
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# If you have more than 4K of session data or don't want your data to be
|
|
30
|
-
# visible to the user, pick another session store.
|
|
31
|
-
#
|
|
32
|
-
# CookieOverflow is raised if you attempt to store more than 4K of data.
|
|
33
|
-
# TamperedWithCookie is raised if the data integrity check fails.
|
|
34
|
-
#
|
|
35
|
-
# A message digest is included with the cookie to ensure data integrity:
|
|
36
|
-
# a user cannot alter session data without knowing the secret key included
|
|
37
|
-
# in the hash.
|
|
38
|
-
#
|
|
39
|
-
# To use Cookie Sessions, set in config/merb.yml
|
|
40
|
-
# :session_secret_key - your secret digest key
|
|
41
|
-
# :session_store: cookie
|
|
42
|
-
class CookieStore
|
|
43
|
-
# TODO (maybe):
|
|
44
|
-
# include request ip address
|
|
45
|
-
# AES encrypt marshaled data
|
|
46
|
-
|
|
47
|
-
# Raised when storing more than 4K of session data.
|
|
48
|
-
class CookieOverflow < StandardError; end
|
|
49
|
-
|
|
50
|
-
# Raised when the cookie fails its integrity check.
|
|
51
|
-
class TamperedWithCookie < StandardError; end
|
|
52
|
-
|
|
53
|
-
# Cookies can typically store 4096 bytes.
|
|
54
|
-
MAX = 4096
|
|
55
|
-
DIGEST = OpenSSL::Digest::Digest.new('SHA1') # or MD5, RIPEMD160, SHA256?
|
|
56
|
-
|
|
57
|
-
attr_reader :data
|
|
58
|
-
|
|
59
|
-
def initialize(cookie, secret)
|
|
60
|
-
if secret.nil? or secret.blank?
|
|
61
|
-
raise ArgumentError, 'A secret is required to generate an integrity hash for cookie session data.'
|
|
62
|
-
end
|
|
63
|
-
@secret = secret
|
|
64
|
-
@data = unmarshal(cookie) || Hash.new
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
# return a cookie value. raises CookieOverflow if session contains too
|
|
68
|
-
# much information
|
|
69
|
-
def read_cookie
|
|
70
|
-
unless @data.nil? or @data.empty?
|
|
71
|
-
updated = marshal(@data)
|
|
72
|
-
raise CookieOverflow if updated.size > MAX
|
|
73
|
-
updated
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
# assigns a key value pair
|
|
78
|
-
def []=(k, v)
|
|
79
|
-
@data[k] = v
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
def [](k)
|
|
83
|
-
@data[k]
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
def each(&b)
|
|
87
|
-
@data.each(&b)
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
private
|
|
91
|
-
|
|
92
|
-
def method_missing(name, *args, &block)
|
|
93
|
-
@data.send(name, *args, &block)
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
# Generate the HMAC keyed message digest. Uses SHA1.
|
|
97
|
-
def generate_digest(data)
|
|
98
|
-
OpenSSL::HMAC.hexdigest(DIGEST, @secret, data)
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
# Marshal a session hash into safe cookie data. Include an integrity hash.
|
|
102
|
-
def marshal(session)
|
|
103
|
-
data = Base64.encode64(Marshal.dump(session)).chop
|
|
104
|
-
Mongrel::HttpRequest.escape "#{data}--#{generate_digest(data)}"
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
# Unmarshal cookie data to a hash and verify its integrity.
|
|
108
|
-
def unmarshal(cookie)
|
|
109
|
-
if cookie
|
|
110
|
-
data, digest = Mongrel::HttpRequest.unescape(cookie).split('--')
|
|
111
|
-
unless digest == generate_digest(data)
|
|
112
|
-
raise TamperedWithCookie, "Maybe the site's session_secret_key has changed?"
|
|
113
|
-
end
|
|
114
|
-
Marshal.load(Base64.decode64(data))
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
end
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
require 'memcache_util'
|
|
2
|
-
|
|
3
|
-
module Merb
|
|
4
|
-
|
|
5
|
-
module SessionMixin #:nodoc:
|
|
6
|
-
|
|
7
|
-
def setup_session
|
|
8
|
-
Merb.logger.info("Setting up session")
|
|
9
|
-
before = cookies[_session_id_key]
|
|
10
|
-
request.session, cookies[_session_id_key] = Merb::MemCacheSession.persist(cookies[_session_id_key])
|
|
11
|
-
@_fingerprint = Marshal.dump(request.session.data).hash
|
|
12
|
-
@_new_cookie = cookies[_session_id_key] != before
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def finalize_session
|
|
16
|
-
Merb.logger.info("Finalize session")
|
|
17
|
-
if @_fingerprint != Marshal.dump(request.session.data).hash
|
|
18
|
-
::Cache.put("session:#{@_session.session_id}", request.session.data)
|
|
19
|
-
end
|
|
20
|
-
set_cookie(_session_id_key, request.session.session_id, _session_expiry) if (@_new_cookie || request.session.needs_new_cookie)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def session_store_type
|
|
24
|
-
"memcache"
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
##
|
|
29
|
-
# Sessions stored in memcached.
|
|
30
|
-
#
|
|
31
|
-
# Requires setup in your +merb_init.rb+:
|
|
32
|
-
#
|
|
33
|
-
# require 'memcache'
|
|
34
|
-
# CACHE = MemCache.new('127.0.0.1:11211', { :namespace => 'my_app' })
|
|
35
|
-
#
|
|
36
|
-
# And a setting in +merb.yml+:
|
|
37
|
-
#
|
|
38
|
-
# :session_store: mem_cache
|
|
39
|
-
|
|
40
|
-
class MemCacheSession
|
|
41
|
-
|
|
42
|
-
attr_accessor :session_id
|
|
43
|
-
attr_accessor :data
|
|
44
|
-
attr_accessor :needs_new_cookie
|
|
45
|
-
|
|
46
|
-
def initialize(session_id)
|
|
47
|
-
@session_id = session_id
|
|
48
|
-
@data = {}
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
class << self
|
|
52
|
-
# Generates a new session ID and creates a row for the new session in the database.
|
|
53
|
-
def generate
|
|
54
|
-
sid = Merb::SessionMixin::rand_uuid
|
|
55
|
-
new(sid)
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# Gets the existing session based on the <tt>session_id</tt> available in cookies.
|
|
59
|
-
# If none is found, generates a new session.
|
|
60
|
-
def persist(session_id)
|
|
61
|
-
unless session_id.blank?
|
|
62
|
-
session = ::Cache.get("session:#{session_id}")
|
|
63
|
-
if session.nil?
|
|
64
|
-
# Not in memcached, but assume that cookie exists
|
|
65
|
-
session = new(session_id)
|
|
66
|
-
end
|
|
67
|
-
else
|
|
68
|
-
# No cookie...make a new session_id
|
|
69
|
-
session = generate
|
|
70
|
-
end
|
|
71
|
-
if session.is_a?(MemCacheSession)
|
|
72
|
-
[session, session.session_id]
|
|
73
|
-
else
|
|
74
|
-
# recreate using the rails session as the data
|
|
75
|
-
session_object = MemCacheSession.new(session_id)
|
|
76
|
-
session_object.data = session
|
|
77
|
-
[session_object, session_object.session_id]
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
# Don't try to reload in dev mode.
|
|
83
|
-
def reloadable? #:nodoc:
|
|
84
|
-
false
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
# Regenerate the Session ID
|
|
90
|
-
def regenerate
|
|
91
|
-
@session_id = Merb::SessionMixin::rand_uuid
|
|
92
|
-
self.needs_new_cookie=true
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
# Recreates the cookie with the default expiration time
|
|
96
|
-
# Useful during log in for pushing back the expiration date
|
|
97
|
-
def refresh_expiration
|
|
98
|
-
self.needs_new_cookie=true
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
# Lazy-delete of session data
|
|
102
|
-
def delete
|
|
103
|
-
@data = {}
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
# Has the session been loaded yet?
|
|
107
|
-
def loaded?
|
|
108
|
-
!! @data
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
# assigns a key value pair
|
|
112
|
-
def []=(k, v)
|
|
113
|
-
@data[k] = v
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
def [](k)
|
|
117
|
-
@data[k]
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
def each(&b)
|
|
121
|
-
@data.each(&b)
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
private
|
|
125
|
-
def method_missing(name, *args, &block)
|
|
126
|
-
@data.send(name, *args, &block)
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
end
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
module Merb
|
|
2
|
-
|
|
3
|
-
module SessionMixin #:nodoc:
|
|
4
|
-
|
|
5
|
-
def setup_session
|
|
6
|
-
Merb.logger.info("Setting up session")
|
|
7
|
-
before = cookies[_session_id_key]
|
|
8
|
-
request.session , cookies[_session_id_key] = Merb::MemorySession.persist(cookies[_session_id_key])
|
|
9
|
-
@_new_cookie = cookies[_session_id_key] != before
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def finalize_session
|
|
13
|
-
Merb.logger.info("Finalize session")
|
|
14
|
-
set_cookie(_session_id_key, request.session.session_id, _session_expiry) if (@_new_cookie || request.session.needs_new_cookie)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def session_store_type
|
|
18
|
-
"memory"
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
##
|
|
23
|
-
# Sessions stored in memory.
|
|
24
|
-
#
|
|
25
|
-
# And a setting in +merb.yml+:
|
|
26
|
-
#
|
|
27
|
-
# :session_store: mem_cache
|
|
28
|
-
# :memory_session_ttl: 3600 (in seconds, one hour)
|
|
29
|
-
#
|
|
30
|
-
# Sessions will remain in memory until the server is stopped or the time
|
|
31
|
-
# as set in :memory_session_ttl expires.
|
|
32
|
-
|
|
33
|
-
class MemorySession
|
|
34
|
-
|
|
35
|
-
attr_accessor :session_id
|
|
36
|
-
attr_accessor :data
|
|
37
|
-
attr_accessor :needs_new_cookie
|
|
38
|
-
|
|
39
|
-
def initialize(session_id)
|
|
40
|
-
@session_id = session_id
|
|
41
|
-
@data = {}
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
class << self
|
|
45
|
-
# Generates a new session ID and creates a row for the new session in the database.
|
|
46
|
-
def generate
|
|
47
|
-
sid = Merb::SessionMixin::rand_uuid
|
|
48
|
-
MemorySessionContainer[sid] = new(sid)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
# Gets the existing session based on the <tt>session_id</tt> available in cookies.
|
|
52
|
-
# If none is found, generates a new session.
|
|
53
|
-
def persist(session_id)
|
|
54
|
-
if session_id
|
|
55
|
-
session = MemorySessionContainer[session_id]
|
|
56
|
-
end
|
|
57
|
-
unless session
|
|
58
|
-
session = generate
|
|
59
|
-
end
|
|
60
|
-
[session, session.session_id]
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
# Regenerate the Session ID
|
|
66
|
-
def regenerate
|
|
67
|
-
new_sid = Merb::SessionMixin::rand_uuid
|
|
68
|
-
old_sid = @session_id
|
|
69
|
-
MemorySessionContainer[new_sid] = MemorySessionContainer[old_sid]
|
|
70
|
-
@session_id = new_sid
|
|
71
|
-
MemorySessionContainer.delete(old_sid)
|
|
72
|
-
self.needs_new_cookie=true
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
# Recreates the cookie with the default expiration time
|
|
76
|
-
# Useful during log in for pushing back the expiration date
|
|
77
|
-
def refresh_expiration
|
|
78
|
-
self.needs_new_cookie=true
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
# Lazy-delete of session data
|
|
82
|
-
def delete
|
|
83
|
-
@data = {}
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
# Has the session been loaded yet?
|
|
87
|
-
def loaded?
|
|
88
|
-
!! @data
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
# assigns a key value pair
|
|
92
|
-
def []=(k, v)
|
|
93
|
-
@data[k] = v
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
def [](k)
|
|
97
|
-
@data[k]
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
def each(&b)
|
|
101
|
-
@data.each(&b)
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
private
|
|
105
|
-
def method_missing(name, *args, &block)
|
|
106
|
-
@data.send(name, *args, &block)
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
class MemorySessionContainer
|
|
112
|
-
class << self
|
|
113
|
-
|
|
114
|
-
def setup(ttl=nil)
|
|
115
|
-
@sessions = Hash.new
|
|
116
|
-
@timestamps = Hash.new
|
|
117
|
-
@mutex = Mutex.new
|
|
118
|
-
@session_ttl = ttl || 60*60 # default 1 hour
|
|
119
|
-
start_timer
|
|
120
|
-
self
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
def create(opts={})
|
|
124
|
-
self[opts[:session_id]] = opts[:data]
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
def [](key)
|
|
129
|
-
@mutex.synchronize {
|
|
130
|
-
@timestamps[key] = Time.now
|
|
131
|
-
@sessions[key]
|
|
132
|
-
}
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
def []=(key, val)
|
|
136
|
-
@mutex.synchronize {
|
|
137
|
-
@timestamps[key] = Time.now
|
|
138
|
-
@sessions[key] = val
|
|
139
|
-
}
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
def delete(key)
|
|
143
|
-
@mutex.synchronize {
|
|
144
|
-
@sessions.delete(key)
|
|
145
|
-
@timestamps.delete(key)
|
|
146
|
-
}
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
def reap_old_sessions
|
|
150
|
-
@timestamps.each do |key,stamp|
|
|
151
|
-
if stamp + @session_ttl < Time.now
|
|
152
|
-
delete(key)
|
|
153
|
-
end
|
|
154
|
-
end
|
|
155
|
-
GC.start
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
def start_timer
|
|
159
|
-
Thread.new do
|
|
160
|
-
loop {
|
|
161
|
-
sleep @session_ttl
|
|
162
|
-
reap_old_sessions
|
|
163
|
-
}
|
|
164
|
-
end
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
def sessions
|
|
168
|
-
@sessions
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
end # end singleton class
|
|
172
|
-
|
|
173
|
-
end # end MemorySessionContainer
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
Merb::MemorySessionContainer.setup(Merb::Config[:memory_session_ttl])
|