rack-mini-profiler 0.9.0 → 0.9.1
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.
Potentially problematic release.
This version of rack-mini-profiler might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG +7 -0
- data/README.md +99 -44
- data/lib/mini_profiler/profiler.rb +7 -5
- data/lib/mini_profiler_rails/railtie.rb +13 -5
- data/lib/patches/sql_patches.rb +13 -7
- data/rack-mini-profiler.gemspec +2 -2
- metadata +52 -52
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d38192262a50a132bef944ea6508e5c2edd65d30
|
4
|
+
data.tar.gz: 3f9c5065465f08cdf643b701185b383eaa04b182
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 47dc4effcf2bbd0d46a0be9738e761783a23bb6f2a35778913f02fc01910ee3b143d72b858007ef0e7dcb0e3570f7637b86ef6f1e3d013b7b71715cc6919c5b8
|
7
|
+
data.tar.gz: ac388ffaa4ea593ac4f96dd507d5d638a35bae9e526dffb772bacf0c8afd4f0f8639e8b255ff186e5e358ed921ed8cdce1d6a95fb152271462c97ab31610ae74
|
data/CHANGELOG
CHANGED
@@ -170,5 +170,12 @@
|
|
170
170
|
* Improved reports for pp=profile-gc
|
171
171
|
* pp=flamegraph&flamegraph_sample_rate=1 , allow you to specify sampling rates
|
172
172
|
|
173
|
+
13-March-2013 - Sam Saffron
|
174
|
+
* Version 0.9.1
|
175
|
+
* Added back Ruby 1.8 support (thanks Malet)
|
176
|
+
* Corrected Rails 3.0 support (thanks Zlatko)
|
177
|
+
* Corrected fix possible XSS (admin only)
|
178
|
+
* Amend Railstie so MiniProfiler can be launched with action view or action controller (Thanks Akira)
|
179
|
+
* Corrected Sql patching to avoid setting instance vars on nil which is frozen (thanks Andy, huoxito)
|
173
180
|
|
174
181
|
|
data/README.md
CHANGED
@@ -4,12 +4,21 @@
|
|
4
4
|
|
5
5
|
Middleware that displays speed badge for every html page. Designed to work both in production and in development.
|
6
6
|
|
7
|
+
#### Features
|
8
|
+
|
9
|
+
* database profiling. Currently supports Mysql2, Postgres, and Mongoid3 (with fallback support to ActiveRecord)
|
10
|
+
|
11
|
+
#### Learn more
|
12
|
+
|
13
|
+
* [Visit our community](http://community.miniprofiler.com)
|
14
|
+
* [Watch the RailsCast](http://railscasts.com/episodes/368-miniprofiler)
|
15
|
+
* [Read about Flame graphs in rack-mini-profiler](http://samsaffron.com/archive/2013/03/19/flame-graphs-in-ruby-miniprofiler)
|
16
|
+
* [Read the announcement posts from 2012](http://samsaffron.com/archive/2012/07/12/miniprofiler-ruby-edition)
|
17
|
+
|
7
18
|
## rack-mini-profiler needs your help
|
8
19
|
|
9
20
|
We have decided to restructure our repository so there is a central UI repo and the various language implementation have their own.
|
10
21
|
|
11
|
-
The new home for rack-mini-profiler is https://github.com/MiniProfiler/rack-mini-profiler
|
12
|
-
|
13
22
|
**WE NEED HELP.**
|
14
23
|
|
15
24
|
- Setting up a build that reuses https://github.com/MiniProfiler/ui
|
@@ -32,6 +41,26 @@ NOTE: Be sure to require rack_mini_profiler below the `pg` and `mysql` gems in y
|
|
32
41
|
|
33
42
|
All you have to do is include the Gem and you're good to go in development. See notes below for use in production.
|
34
43
|
|
44
|
+
#### Rails and manual initialization
|
45
|
+
|
46
|
+
In case you need to make sure rack_mini_profiler initialized after all other gems.
|
47
|
+
Or you want to execute some code before rack_mini_profiler required.
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
gem 'rack-mini-profiler', require: false
|
51
|
+
```
|
52
|
+
|
53
|
+
Then put initialize code in file like `config/initializers/rack_profiler.rb`
|
54
|
+
|
55
|
+
```ruby
|
56
|
+
if Rails.env == 'development'
|
57
|
+
require 'rack-mini-profiler'
|
58
|
+
|
59
|
+
# initialization is skipped so trigger it
|
60
|
+
Rack::MiniProfilerRails.initialize!(Rails.application)
|
61
|
+
end
|
62
|
+
```
|
63
|
+
|
35
64
|
#### Rack Builder
|
36
65
|
|
37
66
|
```ruby
|
@@ -52,7 +81,17 @@ class MyApp < Sinatra::Base
|
|
52
81
|
end
|
53
82
|
```
|
54
83
|
|
55
|
-
|
84
|
+
### Flamegraphs
|
85
|
+
|
86
|
+
To generate [flamegraphs](http://samsaffron.com/archive/2013/03/19/flame-graphs-in-ruby-miniprofiler):
|
87
|
+
|
88
|
+
* add the **flamegraph** gem to your Gemfile
|
89
|
+
* visit a page in your app with `?pp=flamegraph`
|
90
|
+
|
91
|
+
Flamegraph generation is supported in MRI 2.0 and 2.1 only.
|
92
|
+
|
93
|
+
|
94
|
+
## Access control in production
|
56
95
|
|
57
96
|
rack-mini-profiler is designed with production profiling in mind. To enable that just run `Rack::MiniProfiler.authorize_request` once you know a request is allowed to profile.
|
58
97
|
|
@@ -65,20 +104,20 @@ def authorize
|
|
65
104
|
end
|
66
105
|
```
|
67
106
|
|
68
|
-
##
|
107
|
+
## Configuration
|
69
108
|
|
70
|
-
|
109
|
+
Various aspects of rack-mini-profiler's behavior can be configured when your app boots.
|
110
|
+
For example in a Rails app, this should be done in an initializer:
|
111
|
+
**config/initializers/mini_profiler.rb**
|
71
112
|
|
72
|
-
|
113
|
+
### Storage
|
73
114
|
|
74
|
-
rack-mini-profiler stores
|
115
|
+
rack-mini-profiler stores its results so they can be shared later and aren't lost at the end of the request.
|
75
116
|
|
76
117
|
There are 4 storage options: `MemoryStore`, `RedisStore`, `MemcacheStore`, and `FileStore`.
|
77
118
|
|
78
119
|
`FileStore` is the default in Rails environments and will write files to `tmp/miniprofiler/*`. `MemoryStore` is the default otherwise.
|
79
120
|
|
80
|
-
To change the default you can create a file in `config/initializers/mini_profiler.rb`
|
81
|
-
|
82
121
|
```ruby
|
83
122
|
# set MemoryStore
|
84
123
|
Rack::MiniProfiler.config.storage = Rack::MiniProfiler::MemoryStore
|
@@ -97,7 +136,7 @@ RedisStore/MemcacheStore work in multi process and multi machine environments (R
|
|
97
136
|
|
98
137
|
Additionally you may implement an AbstractStore for your own provider.
|
99
138
|
|
100
|
-
|
139
|
+
### User result segregation
|
101
140
|
|
102
141
|
MiniProfiler will attempt to keep all user results isolated, out-of-the-box the user provider uses the ip address:
|
103
142
|
|
@@ -113,35 +152,58 @@ Rack::MiniProfiler.config.user_provider = Proc.new{ |env| CurrentUser.get(env) }
|
|
113
152
|
|
114
153
|
The string this function returns should be unique for each user on the system (for anonymous you may need to fall back to ip address)
|
115
154
|
|
116
|
-
|
155
|
+
### Configuration Options
|
117
156
|
|
157
|
+
You can set configuration options using the configuration accessor on `Rack::MiniProfiler`.
|
158
|
+
For example:
|
159
|
+
|
160
|
+
```ruby
|
161
|
+
Rack::MiniProfiler.config.position = 'right'
|
162
|
+
Rack::MiniProfiler.config.start_hidden = true
|
118
163
|
```
|
119
|
-
|
120
|
-
$ rake spec
|
121
|
-
```
|
164
|
+
The available configuration options are:
|
122
165
|
|
123
|
-
|
166
|
+
* pre_authorize_cb - A lambda callback you can set to determine whether or not mini_profiler should be visible on a given request. Default in a Rails environment is only on in development mode. If in a Rack app, the default is always on.
|
167
|
+
* position - Can either be 'right' or 'left'. Default is 'left'.
|
168
|
+
* skip_schema_queries - Whether or not you want to log the queries about the schema of your tables. Default is 'false', 'true' in rails development.
|
169
|
+
* auto_inject (default true) - when false the miniprofiler script is not injected in the page
|
170
|
+
* backtrace_filter - a regex you can use to filter out unwanted lines from the backtraces
|
171
|
+
* toggle_shortcut (default Alt+P) - a jquery.hotkeys.js-style keyboard shortcut, used to toggle the mini_profiler's visibility. See http://code.google.com/p/js-hotkeys/ for more info.
|
172
|
+
* start_hidden (default false) - Whether or not you want the mini_profiler to be visible when loading a page
|
173
|
+
* backtrace_threshold_ms (default zero) - Minimum SQL query elapsed time before a backtrace is recorded. Backtrace recording can take a couple of milliseconds on rubies earlier than 2.0, impacting performance for very small queries.
|
174
|
+
* flamegraph_sample_rate (default 0.5ms) - How often fast_stack should get stack trace info to generate flamegraphs
|
124
175
|
|
125
|
-
|
176
|
+
### Custom middleware ordering (required if using `Rack::Deflate` with Rails)
|
126
177
|
|
127
|
-
|
178
|
+
If you are using `Rack::Deflate` with rails and rack-mini-profiler in its default configuration,
|
179
|
+
`Rack::MiniProfiler` will be injected (as always) at position 0 in the middleware stack. This
|
180
|
+
will result in it attempting to inject html into the already-compressed response body. To fix this,
|
181
|
+
the middleware ordering must be overriden.
|
128
182
|
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
Rack::MiniProfiler
|
139
|
-
|
140
|
-
Rack::MiniProfiler.config.flamegraph_sample_rate = 1
|
183
|
+
To do this, first add `, require: false` to the gemfile entry for rack-mini-profiler.
|
184
|
+
This will prevent the railtie from running. Then, customize the initialization
|
185
|
+
in the initializer like so:
|
186
|
+
|
187
|
+
```ruby
|
188
|
+
require 'rack-mini-profiler'
|
189
|
+
|
190
|
+
Rack::MiniProfilerRails.initialize!(Rails.application)
|
191
|
+
|
192
|
+
Rails.application.middleware.delete(Rack::MiniProfiler)
|
193
|
+
Rails.application.middleware.insert_after(Rack::Deflater, Rack::MiniProfiler)
|
141
194
|
```
|
142
195
|
|
196
|
+
Deleting the middleware and then reinserting it is a bit inelegant, but
|
197
|
+
a sufficient and costless solution. It is possible that rack-mini-profiler might
|
198
|
+
support this scenario more directly if it is found that
|
199
|
+
there is significant need for this confriguration or that
|
200
|
+
the above recipe causes problems.
|
201
|
+
|
202
|
+
|
203
|
+
## Special query strings
|
204
|
+
|
205
|
+
If you include the query string `pp=help` at the end of your request you will see the various options available. You can use these options to extend or contract the amount of diagnostics rack-mini-profiler gathers.
|
143
206
|
|
144
|
-
In a Rails app, this can be done conveniently in an initializer such as config/initializers/mini_profiler.rb.
|
145
207
|
|
146
208
|
## Rails 2.X support
|
147
209
|
|
@@ -162,7 +224,7 @@ c.storage_options = {:path => tmp}
|
|
162
224
|
c.storage = ::Rack::MiniProfiler::FileStore
|
163
225
|
config.middleware.use(::Rack::MiniProfiler)
|
164
226
|
::Rack::MiniProfiler.profile_method(ActionController::Base, :process) {|action| "Executing action: #{action}"}
|
165
|
-
::Rack::MiniProfiler.profile_method(ActionView::Template, :render) {|x,y| "Rendering: #{
|
227
|
+
::Rack::MiniProfiler.profile_method(ActionView::Template, :render) {|x,y| "Rendering: #{path_without_format_and_extension}"}
|
166
228
|
|
167
229
|
# monkey patch away an activesupport and json_pure incompatability
|
168
230
|
# http://pivotallabs.com/users/alex/blog/articles/1332-monkey-patch-of-the-day-activesupport-vs-json-pure-vs-ruby-1-8
|
@@ -173,21 +235,14 @@ if JSON.const_defined?(:Pure)
|
|
173
235
|
end
|
174
236
|
```
|
175
237
|
|
176
|
-
##
|
177
|
-
|
178
|
-
* pre_authorize_cb - A lambda callback you can set to determine whether or not mini_profiler should be visible on a given request. Default in a Rails environment is only on in development mode. If in a Rack app, the default is always on.
|
179
|
-
* position - Can either be 'right' or 'left'. Default is 'left'.
|
180
|
-
* skip_schema_queries - Whether or not you want to log the queries about the schema of your tables. Default is 'false', 'true' in rails development.
|
181
|
-
* auto_inject (default true) - when false the miniprofiler script is not injected in the page
|
182
|
-
* backtrace_filter - a regex you can use to filter out unwanted lines from the backtraces
|
183
|
-
* toggle_shortcut (default Alt+P) - a jquery.hotkeys.js-style keyboard shortcut, used to toggle the mini_profiler's visibility. See http://code.google.com/p/js-hotkeys/ for more info.
|
184
|
-
* start_hidden (default false) - Whether or not you want the mini_profiler to be visible when loading a page
|
185
|
-
* backtrace_threshold_ms (default zero) - Minimum SQL query elapsed time before a backtrace is recorded. Backtrace recording can take a couple of milliseconds on rubies earlier than 2.0, impacting performance for very small queries.
|
186
|
-
* flamegraph_sample_rate (default 0.5ms) - How often fast_stack should get stack trace info to generate flamegraphs
|
238
|
+
## Running the Specs
|
187
239
|
|
188
|
-
|
240
|
+
```
|
241
|
+
$ rake build
|
242
|
+
$ rake spec
|
243
|
+
```
|
189
244
|
|
190
|
-
|
245
|
+
Additionally you can also run `autotest` if you like.
|
191
246
|
|
192
247
|
## Licence
|
193
248
|
|
@@ -107,7 +107,9 @@ module Rack
|
|
107
107
|
page_struct = @storage.load(id)
|
108
108
|
unless page_struct
|
109
109
|
@storage.set_viewed(user(env), id)
|
110
|
-
|
110
|
+
id = ERB::Util.html_escape(request['id'])
|
111
|
+
user_info = ERB::Util.html_escape(user(env))
|
112
|
+
return [404, {}, ["Request not found: #{id} - user #{user_info}"]]
|
111
113
|
end
|
112
114
|
unless page_struct['HasUserViewed']
|
113
115
|
page_struct['ClientTimings'] = ClientTimerStruct.init_from_form_data(env, page_struct)
|
@@ -281,16 +283,16 @@ module Rack
|
|
281
283
|
else
|
282
284
|
# do not sully our profile with mini profiler timings
|
283
285
|
current.measure = false
|
284
|
-
match_data = query_string.match(/flamegraph_sample_rate=(
|
286
|
+
match_data = query_string.match(/flamegraph_sample_rate=([\d\.]+)/)
|
285
287
|
|
286
288
|
mode = query_string =~ /mode=c/ ? :c : :ruby
|
287
289
|
|
288
|
-
if match_data && !match_data[
|
289
|
-
sample_rate = match_data[
|
290
|
+
if match_data && !match_data[1].to_f.zero?
|
291
|
+
sample_rate = match_data[1].to_f
|
290
292
|
else
|
291
293
|
sample_rate = config.flamegraph_sample_rate
|
292
294
|
end
|
293
|
-
flamegraph = Flamegraph.generate(nil, fidelity
|
295
|
+
flamegraph = Flamegraph.generate(nil, :fidelity => sample_rate, :embed_resources => query_string =~ /embed/, :mode => mode) do
|
294
296
|
status,headers,body = @app.call(env)
|
295
297
|
end
|
296
298
|
end
|
@@ -7,14 +7,17 @@ module Rack::MiniProfilerRails
|
|
7
7
|
c = Rack::MiniProfiler.config
|
8
8
|
|
9
9
|
# By default, only show the MiniProfiler in development mode, in production allow profiling if post_authorize_cb is set
|
10
|
-
|
10
|
+
#
|
11
|
+
# NOTE: this must be set here with = and not ||=
|
12
|
+
# The out of the box default is "true"
|
13
|
+
c.pre_authorize_cb = lambda { |env|
|
11
14
|
!Rails.env.test?
|
12
15
|
}
|
13
16
|
|
14
17
|
c.skip_paths ||= []
|
15
18
|
|
16
19
|
if Rails.env.development?
|
17
|
-
c.skip_paths << app.config.assets.prefix
|
20
|
+
c.skip_paths << app.config.assets.prefix if app.respond_to? :assets
|
18
21
|
c.skip_schema_queries = true
|
19
22
|
end
|
20
23
|
|
@@ -27,7 +30,8 @@ module Rack::MiniProfilerRails
|
|
27
30
|
end
|
28
31
|
|
29
32
|
# The file store is just so much less flaky
|
30
|
-
|
33
|
+
base_path = Rails.application.config.paths['tmp'].first rescue "#{Rails.root}/tmp"
|
34
|
+
tmp = base_path + '/miniprofiler'
|
31
35
|
FileUtils.mkdir_p(tmp) unless File.exists?(tmp)
|
32
36
|
|
33
37
|
c.storage_options = {:path => tmp}
|
@@ -42,8 +46,12 @@ module Rack::MiniProfilerRails
|
|
42
46
|
app.middleware.insert(0, Rack::MiniProfiler)
|
43
47
|
|
44
48
|
# Attach to various Rails methods
|
45
|
-
|
46
|
-
|
49
|
+
ActiveSupport.on_load(:action_controller) do
|
50
|
+
::Rack::MiniProfiler.profile_method(ActionController::Base, :process) {|action| "Executing action: #{action}"}
|
51
|
+
end
|
52
|
+
ActiveSupport.on_load(:action_view) do
|
53
|
+
::Rack::MiniProfiler.profile_method(ActionView::Template, :render) {|x,y| "Rendering: #{@virtual_path}"}
|
54
|
+
end
|
47
55
|
end
|
48
56
|
|
49
57
|
class Railtie < ::Rails::Railtie
|
data/lib/patches/sql_patches.rb
CHANGED
@@ -47,7 +47,8 @@ if SqlPatches.class_exists? "Mysql2::Client"
|
|
47
47
|
start = Time.now
|
48
48
|
result = query_without_profiling(*args,&blk)
|
49
49
|
elapsed_time = ((Time.now - start).to_f * 1000).round(1)
|
50
|
-
|
50
|
+
record = ::Rack::MiniProfiler.record_sql(args[0], elapsed_time)
|
51
|
+
result.instance_variable_set("@miniprofiler_sql_id", record) if result
|
51
52
|
|
52
53
|
result
|
53
54
|
|
@@ -117,7 +118,8 @@ if SqlPatches.class_exists? "PG::Result"
|
|
117
118
|
start = Time.now
|
118
119
|
result = exec_without_profiling(*args,&blk)
|
119
120
|
elapsed_time = ((Time.now - start).to_f * 1000).round(1)
|
120
|
-
|
121
|
+
record = ::Rack::MiniProfiler.record_sql(args[0], elapsed_time)
|
122
|
+
result.instance_variable_set("@miniprofiler_sql_id", record) if result
|
121
123
|
|
122
124
|
result
|
123
125
|
end
|
@@ -131,7 +133,8 @@ if SqlPatches.class_exists? "PG::Result"
|
|
131
133
|
elapsed_time = ((Time.now - start).to_f * 1000).round(1)
|
132
134
|
mapped = args[0]
|
133
135
|
mapped = @prepare_map[mapped] || args[0] if @prepare_map
|
134
|
-
|
136
|
+
record = ::Rack::MiniProfiler.record_sql(mapped, elapsed_time)
|
137
|
+
result.instance_variable_set("@miniprofiler_sql_id", record) if result
|
135
138
|
|
136
139
|
result
|
137
140
|
end
|
@@ -142,10 +145,12 @@ if SqlPatches.class_exists? "PG::Result"
|
|
142
145
|
|
143
146
|
start = Time.now
|
144
147
|
result = send_query_prepared_without_profiling(*args,&blk)
|
148
|
+
|
145
149
|
elapsed_time = ((Time.now - start).to_f * 1000).round(1)
|
146
150
|
mapped = args[0]
|
147
151
|
mapped = @prepare_map[mapped] || args[0] if @prepare_map
|
148
|
-
|
152
|
+
record = ::Rack::MiniProfiler.record_sql(mapped, elapsed_time)
|
153
|
+
result.instance_variable_set("@miniprofiler_sql_id", record) if result
|
149
154
|
|
150
155
|
result
|
151
156
|
end
|
@@ -157,7 +162,8 @@ if SqlPatches.class_exists? "PG::Result"
|
|
157
162
|
start = Time.now
|
158
163
|
result = exec_without_profiling(*args,&blk)
|
159
164
|
elapsed_time = ((Time.now - start).to_f * 1000).round(1)
|
160
|
-
|
165
|
+
record = ::Rack::MiniProfiler.record_sql(args[0], elapsed_time)
|
166
|
+
result.instance_variable_set("@miniprofiler_sql_id", record) if result
|
161
167
|
|
162
168
|
result
|
163
169
|
end
|
@@ -180,7 +186,7 @@ if SqlPatches.class_exists?("Moped::Node")
|
|
180
186
|
start = Time.now
|
181
187
|
result = process_without_profiling(*args,&blk)
|
182
188
|
elapsed_time = ((Time.now - start).to_f * 1000).round(1)
|
183
|
-
|
189
|
+
::Rack::MiniProfiler.record_sql(args[0].log_inspect, elapsed_time)
|
184
190
|
|
185
191
|
result
|
186
192
|
end
|
@@ -207,7 +213,7 @@ if SqlPatches.class_exists?("RSolr::Connection") && RSolr::VERSION[0] != "0" #
|
|
207
213
|
data << "\n#{Rack::Utils.unescape(request_context[:data])}"
|
208
214
|
end
|
209
215
|
end
|
210
|
-
|
216
|
+
::Rack::MiniProfiler.record_sql(data, elapsed_time)
|
211
217
|
|
212
218
|
result
|
213
219
|
end
|
data/rack-mini-profiler.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "rack-mini-profiler"
|
3
|
-
s.version = "0.9.
|
3
|
+
s.version = "0.9.1"
|
4
4
|
s.summary = "Profiles loading speed for rack applications."
|
5
5
|
s.authors = ["Sam Saffron", "Robin Ward","Aleks Totic"]
|
6
6
|
s.description = "Profiling toolkit for Rack applications with Rails integration. Client Side profiling, DB profiling and Server profiling."
|
@@ -32,4 +32,4 @@ Gem::Specification.new do |s|
|
|
32
32
|
s.add_development_dependency 'flamegraph'
|
33
33
|
|
34
34
|
s.require_paths = ["lib"]
|
35
|
-
end
|
35
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-mini-profiler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Saffron
|
@@ -10,174 +10,174 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2014-
|
13
|
+
date: 2014-03-13 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rack
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ">="
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: 1.1.3
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
|
-
- -
|
26
|
+
- - ">="
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
version: 1.1.3
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: rake
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
|
-
- -
|
33
|
+
- - ">="
|
34
34
|
- !ruby/object:Gem::Version
|
35
35
|
version: '0'
|
36
36
|
type: :development
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
|
-
- -
|
40
|
+
- - ">="
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: '0'
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
44
|
name: rack-test
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
|
-
- -
|
47
|
+
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
49
|
version: '0'
|
50
50
|
type: :development
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
|
-
- -
|
54
|
+
- - ">="
|
55
55
|
- !ruby/object:Gem::Version
|
56
56
|
version: '0'
|
57
57
|
- !ruby/object:Gem::Dependency
|
58
58
|
name: activerecord
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
|
-
- - ~>
|
61
|
+
- - "~>"
|
62
62
|
- !ruby/object:Gem::Version
|
63
63
|
version: '3.0'
|
64
64
|
type: :development
|
65
65
|
prerelease: false
|
66
66
|
version_requirements: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
|
-
- - ~>
|
68
|
+
- - "~>"
|
69
69
|
- !ruby/object:Gem::Version
|
70
70
|
version: '3.0'
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: dalli
|
73
73
|
requirement: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
|
-
- -
|
75
|
+
- - ">="
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
80
|
version_requirements: !ruby/object:Gem::Requirement
|
81
81
|
requirements:
|
82
|
-
- -
|
82
|
+
- - ">="
|
83
83
|
- !ruby/object:Gem::Version
|
84
84
|
version: '0'
|
85
85
|
- !ruby/object:Gem::Dependency
|
86
86
|
name: rspec
|
87
87
|
requirement: !ruby/object:Gem::Requirement
|
88
88
|
requirements:
|
89
|
-
- -
|
89
|
+
- - ">="
|
90
90
|
- !ruby/object:Gem::Version
|
91
91
|
version: '0'
|
92
92
|
type: :development
|
93
93
|
prerelease: false
|
94
94
|
version_requirements: !ruby/object:Gem::Requirement
|
95
95
|
requirements:
|
96
|
-
- -
|
96
|
+
- - ">="
|
97
97
|
- !ruby/object:Gem::Version
|
98
98
|
version: '0'
|
99
99
|
- !ruby/object:Gem::Dependency
|
100
100
|
name: ZenTest
|
101
101
|
requirement: !ruby/object:Gem::Requirement
|
102
102
|
requirements:
|
103
|
-
- -
|
103
|
+
- - ">="
|
104
104
|
- !ruby/object:Gem::Version
|
105
105
|
version: '0'
|
106
106
|
type: :development
|
107
107
|
prerelease: false
|
108
108
|
version_requirements: !ruby/object:Gem::Requirement
|
109
109
|
requirements:
|
110
|
-
- -
|
110
|
+
- - ">="
|
111
111
|
- !ruby/object:Gem::Version
|
112
112
|
version: '0'
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: autotest
|
115
115
|
requirement: !ruby/object:Gem::Requirement
|
116
116
|
requirements:
|
117
|
-
- -
|
117
|
+
- - ">="
|
118
118
|
- !ruby/object:Gem::Version
|
119
119
|
version: '0'
|
120
120
|
type: :development
|
121
121
|
prerelease: false
|
122
122
|
version_requirements: !ruby/object:Gem::Requirement
|
123
123
|
requirements:
|
124
|
-
- -
|
124
|
+
- - ">="
|
125
125
|
- !ruby/object:Gem::Version
|
126
126
|
version: '0'
|
127
127
|
- !ruby/object:Gem::Dependency
|
128
128
|
name: redis
|
129
129
|
requirement: !ruby/object:Gem::Requirement
|
130
130
|
requirements:
|
131
|
-
- -
|
131
|
+
- - ">="
|
132
132
|
- !ruby/object:Gem::Version
|
133
133
|
version: '0'
|
134
134
|
type: :development
|
135
135
|
prerelease: false
|
136
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
137
|
requirements:
|
138
|
-
- -
|
138
|
+
- - ">="
|
139
139
|
- !ruby/object:Gem::Version
|
140
140
|
version: '0'
|
141
141
|
- !ruby/object:Gem::Dependency
|
142
142
|
name: therubyracer
|
143
143
|
requirement: !ruby/object:Gem::Requirement
|
144
144
|
requirements:
|
145
|
-
- -
|
145
|
+
- - ">="
|
146
146
|
- !ruby/object:Gem::Version
|
147
147
|
version: '0'
|
148
148
|
type: :development
|
149
149
|
prerelease: false
|
150
150
|
version_requirements: !ruby/object:Gem::Requirement
|
151
151
|
requirements:
|
152
|
-
- -
|
152
|
+
- - ">="
|
153
153
|
- !ruby/object:Gem::Version
|
154
154
|
version: '0'
|
155
155
|
- !ruby/object:Gem::Dependency
|
156
156
|
name: less
|
157
157
|
requirement: !ruby/object:Gem::Requirement
|
158
158
|
requirements:
|
159
|
-
- -
|
159
|
+
- - ">="
|
160
160
|
- !ruby/object:Gem::Version
|
161
161
|
version: '0'
|
162
162
|
type: :development
|
163
163
|
prerelease: false
|
164
164
|
version_requirements: !ruby/object:Gem::Requirement
|
165
165
|
requirements:
|
166
|
-
- -
|
166
|
+
- - ">="
|
167
167
|
- !ruby/object:Gem::Version
|
168
168
|
version: '0'
|
169
169
|
- !ruby/object:Gem::Dependency
|
170
170
|
name: flamegraph
|
171
171
|
requirement: !ruby/object:Gem::Requirement
|
172
172
|
requirements:
|
173
|
-
- -
|
173
|
+
- - ">="
|
174
174
|
- !ruby/object:Gem::Version
|
175
175
|
version: '0'
|
176
176
|
type: :development
|
177
177
|
prerelease: false
|
178
178
|
version_requirements: !ruby/object:Gem::Requirement
|
179
179
|
requirements:
|
180
|
-
- -
|
180
|
+
- - ">="
|
181
181
|
- !ruby/object:Gem::Version
|
182
182
|
version: '0'
|
183
183
|
description: Profiling toolkit for Rack applications with Rails integration. Client
|
@@ -189,42 +189,42 @@ extra_rdoc_files:
|
|
189
189
|
- README.md
|
190
190
|
- CHANGELOG
|
191
191
|
files:
|
192
|
-
-
|
193
|
-
-
|
194
|
-
- lib/html/
|
195
|
-
- lib/html/
|
196
|
-
- lib/html/list.tmpl
|
197
|
-
- lib/html/share.html
|
192
|
+
- CHANGELOG
|
193
|
+
- README.md
|
194
|
+
- lib/html/includes.css
|
195
|
+
- lib/html/includes.js
|
198
196
|
- lib/html/includes.less
|
199
|
-
- lib/html/profile_handler.js
|
200
197
|
- lib/html/includes.tmpl
|
201
|
-
- lib/html/includes.js
|
202
|
-
- lib/html/list.js
|
203
198
|
- lib/html/jquery.1.7.1.js
|
204
|
-
- lib/html/
|
199
|
+
- lib/html/jquery.tmpl.js
|
200
|
+
- lib/html/list.css
|
201
|
+
- lib/html/list.js
|
202
|
+
- lib/html/list.tmpl
|
203
|
+
- lib/html/profile_handler.js
|
204
|
+
- lib/html/share.html
|
205
|
+
- lib/mini_profiler/client_settings.rb
|
206
|
+
- lib/mini_profiler/client_timer_struct.rb
|
207
|
+
- lib/mini_profiler/config.rb
|
205
208
|
- lib/mini_profiler/context.rb
|
209
|
+
- lib/mini_profiler/custom_timer_struct.rb
|
210
|
+
- lib/mini_profiler/gc_profiler.rb
|
206
211
|
- lib/mini_profiler/page_timer_struct.rb
|
212
|
+
- lib/mini_profiler/profiler.rb
|
213
|
+
- lib/mini_profiler/profiling_methods.rb
|
214
|
+
- lib/mini_profiler/request_timer_struct.rb
|
215
|
+
- lib/mini_profiler/sql_timer_struct.rb
|
216
|
+
- lib/mini_profiler/storage/abstract_store.rb
|
207
217
|
- lib/mini_profiler/storage/file_store.rb
|
208
218
|
- lib/mini_profiler/storage/memcache_store.rb
|
209
219
|
- lib/mini_profiler/storage/memory_store.rb
|
210
|
-
- lib/mini_profiler/storage/abstract_store.rb
|
211
220
|
- lib/mini_profiler/storage/redis_store.rb
|
212
|
-
- lib/mini_profiler/client_settings.rb
|
213
|
-
- lib/mini_profiler/profiling_methods.rb
|
214
|
-
- lib/mini_profiler/gc_profiler.rb
|
215
|
-
- lib/mini_profiler/client_timer_struct.rb
|
216
|
-
- lib/mini_profiler/sql_timer_struct.rb
|
217
|
-
- lib/mini_profiler/config.rb
|
218
|
-
- lib/mini_profiler/custom_timer_struct.rb
|
219
|
-
- lib/mini_profiler/version.rb
|
220
221
|
- lib/mini_profiler/timer_struct.rb
|
221
|
-
- lib/mini_profiler/
|
222
|
-
- lib/
|
222
|
+
- lib/mini_profiler/version.rb
|
223
|
+
- lib/mini_profiler_rails/railtie.rb
|
223
224
|
- lib/patches/net_patches.rb
|
224
225
|
- lib/patches/sql_patches.rb
|
225
226
|
- lib/rack-mini-profiler.rb
|
226
|
-
-
|
227
|
-
- CHANGELOG
|
227
|
+
- rack-mini-profiler.gemspec
|
228
228
|
homepage: http://miniprofiler.com
|
229
229
|
licenses:
|
230
230
|
- MIT
|
@@ -235,17 +235,17 @@ require_paths:
|
|
235
235
|
- lib
|
236
236
|
required_ruby_version: !ruby/object:Gem::Requirement
|
237
237
|
requirements:
|
238
|
-
- -
|
238
|
+
- - ">="
|
239
239
|
- !ruby/object:Gem::Version
|
240
240
|
version: '0'
|
241
241
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
242
242
|
requirements:
|
243
|
-
- -
|
243
|
+
- - ">="
|
244
244
|
- !ruby/object:Gem::Version
|
245
245
|
version: '0'
|
246
246
|
requirements: []
|
247
247
|
rubyforge_project:
|
248
|
-
rubygems_version: 2.0
|
248
|
+
rubygems_version: 2.2.0
|
249
249
|
signing_key:
|
250
250
|
specification_version: 4
|
251
251
|
summary: Profiles loading speed for rack applications.
|