mongrel_page_cache_handler 1.6.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/init.rb +1 -0
- data/lib/cache_server.rb +21 -0
- data/lib/cacher.rb +25 -0
- data/lib/m_action_controller_base.rb +17 -0
- data/lib/mongrel_page_cache_handler.rb +8 -0
- data/lib/tasks/rubyforge_config.yml +5 -0
- data/lib/utils.rb +66 -0
- metadata +60 -0
data/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
#require 'mongrel_page_cache_handler'
|
data/lib/cache_server.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
module Mongrel
|
2
|
+
module PageCacheHandler
|
3
|
+
|
4
|
+
class CacheServer < Mongrel::HttpHandler
|
5
|
+
|
6
|
+
def process(request, response)
|
7
|
+
Mongrel::PageCacheHandler::Utils.do_work(request, response) do
|
8
|
+
file_path = Mongrel::PageCacheHandler::Utils.build_full_file_path(request)
|
9
|
+
if File.exists?(file_path)
|
10
|
+
puts "We found: #{file_path}, let's render it"
|
11
|
+
response.start(200, true) do |head, out|
|
12
|
+
out.write(File.open(file_path).read)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
end #PageCacheHandler
|
21
|
+
end #Mongrel
|
data/lib/cacher.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
module Mongrel
|
2
|
+
module PageCacheHandler
|
3
|
+
|
4
|
+
class Cacher < Mongrel::HttpHandler
|
5
|
+
|
6
|
+
def process(request, response)
|
7
|
+
Mongrel::PageCacheHandler::Utils.do_work(request, response) do
|
8
|
+
if response.status == 200
|
9
|
+
sent = response.header.instance_variable_get("@sent")
|
10
|
+
mcm = sent["mongrel_cache_me"]
|
11
|
+
if mcm
|
12
|
+
file_path = Mongrel::PageCacheHandler::Utils.build_full_file_path(request, true)
|
13
|
+
puts "Let's cache this page: #{file_path}"
|
14
|
+
File.open(file_path, "w") do |f|
|
15
|
+
f.puts response.body.string
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end #Cacher
|
23
|
+
|
24
|
+
end #PageCacheHandler
|
25
|
+
end #Mongrel
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class ActionController::Base
|
2
|
+
|
3
|
+
def self.m_cache_page(*args)
|
4
|
+
before_filter :set_mongrel_page_cache_header, *args
|
5
|
+
end
|
6
|
+
|
7
|
+
protected
|
8
|
+
def set_mongrel_page_cache_header
|
9
|
+
if request.get?
|
10
|
+
# puts "Setting mongrel page cache header for: #{params[:controller]}/#{params[:action]}"
|
11
|
+
response.headers['mongrel_cache_me'] = true
|
12
|
+
else
|
13
|
+
# puts "Won't set mongrel page cache header because the request was not a GET."
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
data/lib/utils.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
module Mongrel
|
2
|
+
module PageCacheHandler
|
3
|
+
|
4
|
+
class Utils
|
5
|
+
|
6
|
+
class << self
|
7
|
+
|
8
|
+
def do_work(request, response)
|
9
|
+
if ActionController::Base.perform_caching
|
10
|
+
if request.params[Mongrel::Const::REQUEST_METHOD] == "GET"
|
11
|
+
case request.params[Mongrel::Const::PATH_INFO]
|
12
|
+
when /\.[a-zA-Z]*$/
|
13
|
+
else
|
14
|
+
yield request, request if block_given?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def build_full_file_path(request, mk_dirs = false)
|
21
|
+
File.join(build_directory_path(request, mk_dirs), build_file_name(request))
|
22
|
+
end
|
23
|
+
|
24
|
+
def build_directory_path(request, mk_dirs = false)
|
25
|
+
path = request.params[Mongrel::Const::PATH_INFO]# + ActionController::Base.page_cache_extension
|
26
|
+
if path == "/"
|
27
|
+
path = "/index"
|
28
|
+
end
|
29
|
+
pcd = ActionController::Base.page_cache_directory
|
30
|
+
dir_path = File.join(pcd, path)
|
31
|
+
FileUtils.mkdir_p(dir_path) if mk_dirs
|
32
|
+
dir_path
|
33
|
+
end
|
34
|
+
|
35
|
+
def build_file_name(request)
|
36
|
+
path = request.params[Mongrel::Const::PATH_INFO]
|
37
|
+
path = "/index" if path == "/"
|
38
|
+
url = path
|
39
|
+
query_string = request.params["QUERY_STRING"]
|
40
|
+
query_params = {:page => "1"}
|
41
|
+
unless query_string.blank?
|
42
|
+
query_string.split("&").sort.each do |pair|
|
43
|
+
pair_values = pair.split("=")
|
44
|
+
query_params[pair_values.first.to_sym] = URI.unescape(pair_values.last)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
query_params.delete(:gclid)
|
48
|
+
f_name = ""
|
49
|
+
query_params.each_pair do |key, value|
|
50
|
+
f_name << key.to_s
|
51
|
+
f_name << "_"
|
52
|
+
f_name << value
|
53
|
+
f_name << "-"
|
54
|
+
end
|
55
|
+
f_name.gsub!(" ", "_")
|
56
|
+
f_name.downcase!
|
57
|
+
f_name.chop!
|
58
|
+
f_name
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
end #PageCacheHandler
|
66
|
+
end #Mongrel
|
metadata
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.9.2
|
3
|
+
specification_version: 1
|
4
|
+
name: mongrel_page_cache_handler
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 1.6.0
|
7
|
+
date: 2007-10-26 00:00:00 -04:00
|
8
|
+
summary: mongrel_page_cache_handler
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
- lib
|
12
|
+
- lib
|
13
|
+
- lib/tasks
|
14
|
+
email:
|
15
|
+
homepage:
|
16
|
+
rubyforge_project: magrathea
|
17
|
+
description: "mongrel_page_cache_handler was developed by: markbates"
|
18
|
+
autorequire:
|
19
|
+
- utils
|
20
|
+
- mongrel_page_cache_handler
|
21
|
+
- m_action_controller_base
|
22
|
+
- cacher
|
23
|
+
- cache_server
|
24
|
+
default_executable:
|
25
|
+
bindir: bin
|
26
|
+
has_rdoc: false
|
27
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
28
|
+
requirements:
|
29
|
+
- - ">"
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: 0.0.0
|
32
|
+
version:
|
33
|
+
platform: ruby
|
34
|
+
signing_key:
|
35
|
+
cert_chain:
|
36
|
+
post_install_message:
|
37
|
+
authors:
|
38
|
+
- markbates
|
39
|
+
files:
|
40
|
+
- init.rb
|
41
|
+
- lib/cache_server.rb
|
42
|
+
- lib/cacher.rb
|
43
|
+
- lib/m_action_controller_base.rb
|
44
|
+
- lib/mongrel_page_cache_handler.rb
|
45
|
+
- lib/tasks/rubyforge_config.yml
|
46
|
+
- lib/utils.rb
|
47
|
+
test_files: []
|
48
|
+
|
49
|
+
rdoc_options: []
|
50
|
+
|
51
|
+
extra_rdoc_files: []
|
52
|
+
|
53
|
+
executables: []
|
54
|
+
|
55
|
+
extensions: []
|
56
|
+
|
57
|
+
requirements: []
|
58
|
+
|
59
|
+
dependencies: []
|
60
|
+
|