miniprofiler / rack-mini-profiler Goto Github PK
View Code? Open in Web Editor NEWProfiler for your development and production Ruby rack apps.
License: MIT License
Profiler for your development and production Ruby rack apps.
License: MIT License
Hey there,
What I'm trying to do is to disable loading of mini-profiler without touching Gemfile.
Even with "pp=disable" mini-profiler is still being loaded (at least to be able to enable it back).
Is there a setting to disable mini-profiler loading from the start without removing it from Gemfile?
It would be nice to be able to have the same information about other storages, such as redis or memcache.
(This is being copied over from SamSaffron/MiniProfiler#101 so it doesn't get lost.)
JRuby application servers that can do hot redeploys will shut down the old JRuby runtime without exiting the process. In a few places, rack-mini-profiler creates threads that won't shut down until the process dies. Each of these threads will cause a stopped JRuby runtime to sit around in memory much longer than necessary (they appear to be weakrefs and as such, should eventually be GC'd).
Rack::MiniProfiler::FileStore
Rack::MiniProfiler::MemoryStore
are definitely problematic.
Rack::MiniProfiler may be problematic. This one create a thread that can be exited under certain circumstances. I'd have to trace through to see when that happens.
The simple fix is to flag the thread in an at_exit handler. I did this for another project:
If you're open to a similar solution I can pull together a pull request.
Why do I keep getting this error msg:
An exception of type 'System.Data.SqlClient.SqlException' occurred in MiniProfiler.dll but was not handled in user code
Additional information: Invalid column name 'CreatedOn'.
I'm using Entity Framework version 6 and miniprofiler.ef6 3.0.10-beta5.
#35 introduces a regression so that the profiler is enabled in Rails test environment.
Rack::MiniProfiler::Config initializes a default pre_authorize_cb
@pre_authorize_cb = lambda {|env| true}
So pre_authorize_cb
is defined when the code in Rack::MiniProfilerRails is executed. With the ||= operator added in #35, pre_authorize_cb
will not be redefined
c.pre_authorize_cb ||= lambda { |env|
!Rails.env.test?
}
So the profiler is now enabled in test environment by default, which is not the desired behavior.
Any ideas how to get this to show?
It's trivial for somebody to craft a cookie so that client_settings.has_cookie?
will return true
. While this won't allow them to view the profiling information without MiniProfiler.request_authorized?
also being true, it'll still cause rack-mini-profiler to gather the profiling information, which could be utilized to increase the severity of a DoS attack, especially with gc profiling.
One quick fix would be to only allow pp=enable
to take effect if MiniProfiler.request_authorized?
, so I could push a pull request for that, but it doesn't solve the issue for people who don't use config.enabled = false
.
When using select in sql I got an error
@new_charities = Charity.select(:id, :name, :slug).published.where('created_at >= :since_date', since_date: since_date)
when I remove the select there is no error
@new_charities = Charity.published.where('created_at >= :since_date', since_date: since_date)
here is a stack trace
https://gist.github.com/gudata/da2c5ce57ffd776179c6
I have tried with master and the latest released gem.
Great project - keep up the good work ๐
I tried out the flamegraph option on my Rails project, but apparently it did not show any view related informations? Just the controller stuff as well as Rails stuff.
Anybody else experiencing this?
Or maybe I'm misunderstanding what to look for stack trace wise :-)
When I update my Rails 3.0.20 app to profiler v0.9.0, I get the following error:
/Users/gamov/.rvm/gems/ruby-1.9.3-p484@ector/gems/railties-3.0.20/lib/rails/railtie/configuration.rb:77:in `method_missing': undefined method `assets' for #<Rails::Application::Configuration:0x007f8e693f0350> (NoMethodError)
Exiting
from /Users/gamov/.rvm/gems/ruby-1.9.3-p484@ector/gems/rack-mini-profiler-0.9.0/lib/mini_profiler_rails/railtie.rb:17:in `initialize!'
from /Users/gamov/.rvm/gems/ruby-1.9.3-p484@ector/gems/rack-mini-profiler-0.9.0/lib/mini_profiler_rails/railtie.rb:52:in `block in <class:Railtie>'
looks like 0.9.0 is expecting the asset pipeline but I don't think there is a Rails 3.1 + requirement for v0.9.0, Am I correct?
0.1.31 doesn't have this problem.
A message like this appears in firefox javascript error log.
The backtrace_filter config listed does not exist. You get a NoMethodError when defining it in the config file.
rack-mini-profiler
presumably loads jquery directly for its own use, but if the rest of the app uses require.js
to load jquery
as an AMD module, the module does not get defined properly. I guess that jquery detects that it is already loaded.
Not sure what a workaround would be, other than cutting out the jquery
dependency from rack-mini-profiler
, but perhaps it would at least be worthwhile cautioning require.js
users.
The cache-control headers without mini-profiler:
HTTP/1.1 200 OK
Date: Fri, 07 Mar 2014 12:48:37 GMT
Content-Type: image/jpeg
Status: 200 OK
Content-Length: 340038
Content-Disposition: filename="14tdysnuvo.jpg"
Cache-Control: public, max-age=31536000
ETag: "39f18a9d2ab41214aa62c3fe28efcd7d44e92ea9"
X-Request-Id: dce5d9cd-cfbb-4362-a42f-a7b62ded6574
X-Runtime: 0.100084
and with mini-profiler enabled:
HTTP/1.1 200 OK
Date: Fri, 07 Mar 2014 12:33:58 GMT
Status: 200 OK
Content-Type: image/jpeg
Content-Length: 340038
Content-Disposition: filename="14tdysnuvo.jpg"
Cache-Control: must-revalidate, private, max-age=0
X-Request-Id: 97c0797a-71cb-429a-800e-963bcf93f50d
X-Runtime: 0.104847
Set-Cookie: __profilin=p%3Dt; path=/
Set-Cookie: __profilin=p%3Dt; path=/
Set-Cookie: __profilin=p%3Dt; path=/
X-MiniProfiler-Ids: ["mryxzb2q56i903vzo703","g7x7vc8680669mha5h0q","bpe4damr7lhmz98m76s9","rxi35n4b1ucuszoil3g5","96f75o5579wx53nhjwqv","5obvbow2o2cdbplrfhud","rnr6i46hnelap0abdtx9","wsrkubaekehj9gk1ndxo","dc2l6imvfwvzl7ta66pw","2wuoraq2z97ox8rfkdsa"]
can ayone explain the reason why mini-profiler removes the e-tag and cache-control headers and how to disable this behavior?
I have an test-environment and want both, the miniprofiler and a working cache in front of the app.
When I include the gem in my rails app the profiler is not shown. However, the javascript is included and the div is created for the widget, but the final content is empty.
I tried adding Rack::MiniProfiler.authorize_request
in a before_filter in my application controller: no dice.
I tried creating an initializer and add require: false
in the gem file as described in the README: no profiler.
I am using puma, rails 4.0.1, and ruby ruby 2.0.0p247
Any tips?
I have an application with scope, in routes, for locales, like this :
Lescollectionneurs::Application.routes.draw do
scope "(:locale)", locale: /en|fr/ do
#...
end
end
When miniprofile do a http request, it will send at this address /fr/mini-profiler-resources
but it does not works because it does not like the scope. Is there a solution?
Thanks!
It would be great if mini-profiler had an option to default to disabled. Then we could authorize all requests and use pp=enable to turn it on.
When I click in share link every time I get an error
http://localhost:3000/mini-profiler-resources/results?id=nbrc0vjdn5ewjtyjbgs7
In other rails projects only crash the first get of share page. The next has no error.
[2013-11-08 11:22:23] ERROR NoMethodError: undefined method `page_struct' for nil:NilClass
/home/davidm/.rvm/gems/ruby-1.9.3-p448@mundocoleccion/gems/rack-mini-profiler-0.1.31/Ruby/lib/mini_profiler/profiler.rb:479:in `ids_comma_separated'
/home/davidm/.rvm/gems/ruby-1.9.3-p448@mundocoleccion/gems/rack-mini-profiler-0.1.31/Ruby/lib/mini_profiler/profiler.rb:490:in `get_profile_script'
/home/davidm/.rvm/gems/ruby-1.9.3-p448@mundocoleccion/gems/rack-mini-profiler-0.1.31/Ruby/lib/mini_profiler/profiler.rb:130:in `serve_results'
/home/davidm/.rvm/gems/ruby-1.9.3-p448@mundocoleccion/gems/rack-mini-profiler-0.1.31/Ruby/lib/mini_profiler/profiler.rb:141:in `serve_html'
/home/davidm/.rvm/gems/ruby-1.9.3-p448@mundocoleccion/gems/rack-mini-profiler-0.1.31/Ruby/lib/mini_profiler/profiler.rb:197:in `call'
/home/davidm/.rvm/gems/ruby-1.9.3-p448@mundocoleccion/gems/railties-3.2.11/lib/rails/engine.rb:479:in `call'
/home/davidm/.rvm/gems/ruby-1.9.3-p448@mundocoleccion/gems/railties-3.2.11/lib/rails/application.rb:223:in `call'
/home/davidm/.rvm/gems/ruby-1.9.3-p448@mundocoleccion/gems/rack-1.4.5/lib/rack/content_length.rb:14:in `call'
/home/davidm/.rvm/gems/ruby-1.9.3-p448@mundocoleccion/gems/railties-3.2.11/lib/rails/rack/log_tailer.rb:17:in `call'
/home/davidm/.rvm/gems/ruby-1.9.3-p448@mundocoleccion/gems/rack-1.4.5/lib/rack/handler/webrick.rb:59:in `service'
/home/davidm/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
/home/davidm/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
/home/davidm/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
Rack::MiniProfiler.config.enabled = false
undefined method `enabled=' for #<Rack::MiniProfiler::Config:0x007fcb67c63a10> (NoMethodError)
Rack::MiniProfiler.config.flamegraph_sample_rate = 1
undefined method `flamegraph_sample_rate=' for #<Rack::MiniProfiler::Config:0x007fe50826b9f8> (NoMethodError)
I'm on version rack-mini-profiler (0.1.28)
!! Unexpected error while processing request: incompatible character encodings: ASCII-8BIT and UTF-8
When using full page caching. After the page is written to disk with mini-profiler information, on the first attempt to read it back this error occurs. It does not happen if mini-profiler is disabled.
My main (S)CSS file started taking up 30s to compile in development on every change, so I thought I'd try the gem.
When I called the firegraph on my application.css
, the application goes completely moot. It does not finish the request, just leaves the request hanging. Only a SIGKILL will end the zombie.
Note it does not happen when (a) Sass hasn't changed, or (b) no firegraph is asked for.
Suggestions?
Hi,
Due to some rounding problems on Ruby calculations using floats, we had to monkey patch the Float class to automatically convert 'itself' to a BigDecimal.
I tried using rack-mini-profiler, but kept getting a JavaScript error when formatting the duration.
The problem is that when the duration is a BigDecimal (as is our case), when converting to JSON it is exported as string, and not as number, and as such, the line 905 of includes.js
raises an error because String doesn't have the toFixed
function.
A fix to this, which appears to be innocuous, is simply changing:
formatDuration: function (duration) {
return (duration || 0).toFixed(1);
}
to
formatDuration: function (duration) {
return Number(duration || 0).toFixed(1);
}
To ensure that the duration
is always numeric before calling toFixed
.
Do you think it's possible to include this fix?
When I add the rack mini profiler to my gem file it adds this
<script async="" type="text/javascript" id="mini-profiler" src="/mini-profiler-resources/includes.js?v=8ceae04dd2abbc08ffe85a258d408292" data-version="8ceae04dd2abbc08ffe85a258d408292" data-path="/mini-profiler-resources/" data-current-id="9nlli8mq1mzulvt6qvvx" data-ids="9nlli8mq1mzulvt6qvvx,9nlli8mq1mzulvt6qvvx" data-position="left" data-trivial="false" data-children="false" data-max-traces="10" data-controls="false" data-authorized="true" data-toggle-shortcut="Alt+P" data-start-hidden="false"></script>
that whitespace at the top has been rendering a blank space at the bottom of my layout since I installed it and its been driving me nuts.
When I add,
gem 'rack-mini-profiler', require: false
in my Gemfile and
if Rails.env == 'development'
require 'rack-mini-profiler'
# initialization is skipped so trigger it
Rack::MiniProfilerRails.initialize!(Rails.application)
end
in my initializer, I get the following trace at the end of my Rails log for all requests and I do not see the Mini Profiler. App works fine though.
[2014-12-01 20:28:23] ERROR SystemStackError: stack level too deep
/Users/leninraj/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/set.rb:81
[2014-12-01 20:28:23] ERROR SystemStackError: stack level too deep
/Users/leninraj/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/set.rb:81
[2014-12-01 20:28:23] ERROR SystemStackError: stack level too deep
/Users/leninraj/.rvm/gems/ruby-2.1.2/bundler/gems/activesupport-json_encoder-072ab26faeaa/lib/active_support/json/encoding/active_support_encoder.rb:17
When I remove the gem and the initializer, I do not see this error in the trace. This is the code around active_support_encoder.rb:17
def initialize(options = nil)
@options = options || {}
@seen = Set.new
end
Here is my Gemfile:
source 'https://rubygems.org'
ruby '2.1.2'
gem 'rails', '4.1.4'
gem 'pg'
gem 'haml'
gem 'haml-rails', '~> 0.5.3'
gem 'paperclip', '4.2.0'
gem 'font-awesome-rails'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jquery-turbolinks'
gem 'jquery-ui-rails'
gem 'jbuilder', '~> 1.2'
gem 'devise'
gem 'simple_form'
gem 'merit', '~> 2.0'
gem 'icalendar'
gem 'kaminari'
gem 'rails-api'
gem 'piwik_analytics', '~> 1.0'
gem 'redis', '~> 3.0'
gem 'whenever'
gem 'omniauth'
gem 'slim-rails'
gem 'meta-tags'
gem 'tinymce-rails'
gem 'select2-rails'
gem 'js-routes'
gem 'pundit'
gem 'parsley-rails'
gem 'parsley_simple_form'
gem 'httpclient'
gem 'psych', '2.0.5'
gem 'twitter'
gem 'backbone-on-rails'
gem 'require_all'
gem 'activeadmin', github: 'activeadmin'
gem 'active_model_serializers', '~> 0.9.0'
gem 'activesupport-json_encoder', github: 'chancancode/activesupport-json_encoder'
gem 'sitemap_generator'
gem 'sass'
gem 'compass-rails' # should be in general group, not in assets
gem 'httparty'
gem 'capistrano'
gem 'capistrano-safe-deploy-to'
gem 'capistrano-unicorn-nginx'
# gem 'rack-mini-profiler', require: false
gem 'oj'
gem 'oj_mimic_json'
group :doc do
gem 'sdoc', require: false
end
group :development do
gem 'bullet'
gem 'better_errors'
gem 'binding_of_caller'
gem 'rspec-rails'
gem 'meta_request'
end
group :test do
gem 'database_cleaner'
gem 'capybara', '~> 2.2.0'
gem 'selenium-webdriver'
gem 'cucumber-rails', require: false
gem 'capybara-select2'
gem 'pickle'
gem 'timecop'
gem 'capypage', :path => 'vendor/gems/capypage-0.2.6'
end
group :development, :test do
gem 'factory_girl_rails', '~> 4.0'
gem 'pry'
end
group :assets do
gem 'coffee-rails', '~> 4.0.0'
gem 'uglifier', '>= 1.3.0'
end
What could be the issue? How do I get mini profiler to work?
I tried the master branch using ruby 2.0.0p247 and Rails 4.0.1 and I get this error when I try to boot rails s
:
=> Booting Puma
=> Rails 4.0.1 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Exiting
/root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/actionpack-4.0.1/lib/action_dispatch/middleware/stack.rb:90:in `insert': can't modify frozen Array (RuntimeError)
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/actionpack-4.0.1/lib/action_dispatch/middleware/stack.rb:90:in `insert'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/bundler/gems/rack-mini-profiler-829ab6e2dd3c/lib/mini_profiler_rails/railtie.rb:61:in `block in <class:Railtie>'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/activesupport-4.0.1/lib/active_support/lazy_load_hooks.rb:36:in `call'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/activesupport-4.0.1/lib/active_support/lazy_load_hooks.rb:36:in `execute_hook'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/activesupport-4.0.1/lib/active_support/lazy_load_hooks.rb:45:in `block in run_load_hooks'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/activesupport-4.0.1/lib/active_support/lazy_load_hooks.rb:44:in `each'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/activesupport-4.0.1/lib/active_support/lazy_load_hooks.rb:44:in `run_load_hooks'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.1/lib/rails/application/finisher.rb:62:in `block in <module:Finisher>'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.1/lib/rails/initializable.rb:30:in `instance_exec'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.1/lib/rails/initializable.rb:30:in `run'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.1/lib/rails/initializable.rb:55:in `block in run_initializers'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/tsort.rb:150:in `block in tsort_each'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/tsort.rb:183:in `block (2 levels) in each_strongly_connected_component'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/tsort.rb:219:in `each_strongly_connected_component_from'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/tsort.rb:182:in `block in each_strongly_connected_component'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/tsort.rb:180:in `each'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/tsort.rb:180:in `each_strongly_connected_component'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/tsort.rb:148:in `tsort_each'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.1/lib/rails/initializable.rb:54:in `run_initializers'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.1/lib/rails/application.rb:215:in `initialize!'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.1/lib/rails/railtie/configurable.rb:30:in `method_missing'
from /vagrant/rails401/config/environment.rb:5:in `<top (required)>'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/activesupport-4.0.1/lib/active_support/dependencies.rb:229:in `require'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/activesupport-4.0.1/lib/active_support/dependencies.rb:229:in `block in require'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/activesupport-4.0.1/lib/active_support/dependencies.rb:214:in `load_dependency'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/activesupport-4.0.1/lib/active_support/dependencies.rb:229:in `require'
from /vagrant/rails401/config.ru:3:in `block in <main>'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rack-1.5.2/lib/rack/builder.rb:55:in `instance_eval'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rack-1.5.2/lib/rack/builder.rb:55:in `initialize'
from /vagrant/rails401/config.ru:in `new'
from /vagrant/rails401/config.ru:in `<main>'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rack-1.5.2/lib/rack/builder.rb:49:in `eval'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rack-1.5.2/lib/rack/builder.rb:49:in `new_from_string'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rack-1.5.2/lib/rack/builder.rb:40:in `parse_file'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rack-1.5.2/lib/rack/server.rb:277:in `build_app_and_options_from_config'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rack-1.5.2/lib/rack/server.rb:199:in `app'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.1/lib/rails/commands/server.rb:48:in `app'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rack-1.5.2/lib/rack/server.rb:314:in `wrapped_app'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.1/lib/rails/commands/server.rb:75:in `start'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.1/lib/rails/commands.rb:76:in `block in <top (required)>'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.1/lib/rails/commands.rb:71:in `tap'
from /root/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.1/lib/rails/commands.rb:71:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
If I revert the railtie to this version, it works:
https://github.com/MiniProfiler/rack-mini-profiler/blob/3a90c93d98f916d232a0516a4adbf11f4d15e7b0/lib/mini_profiler_rails/railtie.rb
Hi,
as all caching headers (HTTP_IF_MODIFIED_SINCE
and HTTP_IF_NONE_MATCH
) are stripped away in
Basically the stale?
(http://apidock.com/rails/ActionController/Base/stale%3F) method will always return true. The result is the kind of odd behaviour, that the server regenerates the content, but correctly sets the return code to 304.
I wanted to use the mini profiler to check the impact of http caching in my application. I think this is especially an issue if you use the mini profiler also in production environments.
Jan
p.s. this discussion might also be interesting: rtomayko/rack-cache#24
Hey there, I would like to that for this opensource project. I've tried miniprofiler on Rails 4 , it worked fine.
But i tried the same on Rails 2.3.18 including your patch on environment.rb, but.... it did'nt work. Need help on this, It would be great if i get this working on Rails 2.3.18. Thanks.
Are there reasons to not rename this repo to rack
? It would then be consistent with the other implementations.
In my Rails 4 app I have renamed the path that Asset Pipeline uses to be /resources instead of the default /assets.
I used the following config setting in my config/application.rb file:
# Rename where the asset pipeline serves up assets
config.assets.prefix = "/resources"
Whenever I visit /assets I get my scaffolded Index view, WITH the MiniProfiler displayed. But if I visit /assets/12 I get my Show view but no MiniProfiler displayed.
All other controller Show views display the MiniProfiler correctly. Could this be a bug where MiniProfiler trips up when the Asset Pipeline prefix has been changed from the default?
I'm not really sure why I'm getting a lot of these errors... the page I'm working on has some websocket connections/subscriptions going on but those requests are going through just fine and the only errors I'm seeing are from mini profiler. The profiler is working just fine, but it is polluting my console with the errors in the following screenshot.
https://www.dropbox.com/s/rxhedjgb6p51dsv/Screenshot%202014-10-17%2017.09.48.png?dl=0
I'm having problems with this gem in combination with bullet gem. If I comment out Bullet.enable
then profiler starts showing up.
I am loading rack-mini-profiler manually in a Rails initializer (with require: false
in Gemfile).
I noticed it seems to hang on mutex lock in the middleware, because if I press ctrl-c while profiler is "stuck" loading the results, I get the backtrace shown at the end of this post.
Also a similar thing seems to be happening with appsignal gem.
I am using puma so this may be related to #70
^CExiting
2014-10-16 15:30:35 +0200: Rack app error: #<ThreadError: Attempt to unlock a mutex which is not locked>2014-10-16 15:30:35 +0200: Rack app error: #<ThreadError: Attempt to unlock a mutex which is not locked>
/path/gems/rack-1.5.2/lib/rack/lock.rb:22:in `unlock'
/path/gems/rack-1.5.2/lib/rack/lock.rb:22:in `ensure in call'
/path/gems/rack-1.5.2/lib/rack/lock.rb:23:in `call'
/path/gems/actionpack-4.1.6/lib/action_dispatch/middleware/static.rb:64:in `call'
/path/gems/rack-1.5.2/lib/rack/sendfile.rb:112:in `call'
/Users/me/.rvm/gems/r
2014-10-16 15:30:35 +0200: Rack app error: #<ThreadError: Attempt to unlock a mutex which is not locked>
/path/gems/rack-1.5.2/lib/rack/lock.rb:22:in `unlock'
/path/gems/rack-1.5.2/lib/rack/lock.rb:22:in `ensure in call'
/path/gems/rack-1.5.2/lib/rack/lock.rb:23:in `call'
/path/gems/actionpack-4.1.6/lib/action_dispatch/middleware/static.rb:64:in `call'
/path/gems/rack-1.5.2/lib/rack/sendfile.rb:112:in `call'
/path/gems/rack-mini-profiler-0.9.2/lib/mini_profiler/profiler.rb:193:in `call'
/path/gems/railties-4.1.6/lib/rails/engine.rb:514:in `call'
/path/gems/railties-4.1.6/lib/rails/application.rb:144:in `call'
/path/gems/rack-1.5.2/lib/rack/content_length.rb:14:in `call'
/path/gems/puma-2.9.1/lib/puma/server.rb:490:in `handle_request'
/Users/me/.rvm/gems/r/path/gems/rack-1.5.2/lib/rack/lock.rb:22:in `unlock'
/path/gems/rack-1.5.2/lib/rack/lock.rb:22:in `ensure in call'
/path/gems/rack-1.5.2/lib/rack/lock.rb:23:in `call'
/path/gems/actionpack-4.1.6/lib/action_dispatch/middleware/static.rb:64:in `call'
/path/gems/rack-1.5.2/lib/rack/sendfile.rb:112:in `call'
/path/gems/rack-mini-profiler-0.9.2/lib/mini_profiler/profiler.rb:193:in `call'
/path/gems/railties-4.1.6/lib/rails/engine.rb:514:in `call'
/path/gems/railties-4.1.6/lib/rails/application.rb:144:in `call'
/path/gems/rack-1.5.2/lib/rack/content_length.rb:14:in `call'
/path/gems/puma-2.9.1/lib/puma/server.rb:490:in `handle_request'
/Users/me/.rvm/gems/r2014-10-16 15:30:35 +0200: Rack app error: #<ThreadError: Attempt to unlock a mutex which is not locked>
/path/gems/rack-1.5.2/lib/rack/lock.rb:22:in `unlock'
/path/gems/rack-1.5.2/lib/rack/lock.rb:22:in `ensure in call'
/path/gems/rack-1.5.2/lib/rack/lock.rb:23:in `call'
/path/gems/actionpack-4.1.6/lib/action_dispatch/middleware/static.rb:64:in `call'
/path/gems/rack-1.5.2/lib/rack/sendfile.rb:112:in `call'
/path/gems/rack-mini-profiler-0.9.2/lib/mini_profiler/profiler.rb:193:in `call'
/path/gems/railties-4.1.6/lib/rails/engine.rb:514:in `call'
/path/gems/railties-4.1.6/lib/rails/application.rb:144:in `call'
/path/gems/rack-1.5.2/lib/rack/content_length.rb:14:in `call'
/path/gems/puma-2.9.1/lib/puma/server.rb:490:in `handle_request'
/Users/me/.rvm/gems/r2014-10-16 15:30:35 +0200: Rack app error: #<ThreadError: Attempt to unlock a mutex which is not locked>
/path/gems/rack-1.5.2/lib/rack/lock.rb:22:in `unlock'
/path/gems/rack-1.5.2/lib/rack/lock.rb:22:in `ensure in call'
/path/gems/rack-1.5.2/lib/rack/lock.rb:23:in `call'
/path/gems/actionpack-4.1.6/lib/action_dispatch/middleware/static.rb:64:in `call'
/path/gems/rack-1.5.2/lib/rack/sendfile.rb:112:in `call'
/path/gems/rack-mini-profiler-0.9.2/lib/mini_profiler/profiler.rb:193:in `call'
/path/gems/railties-4.1.6/lib/rails/engine.rb:514:in `call'
/path/gems/railties-4.1.6/lib/rails/application.rb:144:in `call'
/path/gems/rack-1.5.2/lib/rack/content_length.rb:14:in `call'
/path/gems/puma-2.9.1/lib/puma/server.rb:490:in `handle_request'
/path/gems/rack-mini-profiler-0.9.2/lib/mini_profiler/profiler.rb:193:in `call'
/path/gems/railties-4.1.6/lib/rails/engine.rb:514:in `call'
/path/gems/railties-4.1.6/lib/rails/application.rb:144:in `call'
/path/gems/rack-1.5.2/lib/rack/content_length.rb:14:in `call'
/path/gems/puma-2.9.1/lib/puma/server.rb:490:in `handle_request'
/path/gems/puma-2.9.1/lib/puma/server.rb:361:in `process_client'
/path/gems/puma-2.9.1/lib/puma/server.rb:254:in `block in run'
/path/gems/puma-2.9.1/lib/puma/thread_pool.rb:92:in `call'
/path/gems/puma-2.9.1/lib/puma/thread_pool.rb:92:in `block in spawn_thread'
uby-2.1.2@project/gems/puma-2.9.1/lib/puma/server.rb:361:in `process_client'
/path/gems/puma-2.9.1/lib/puma/server.rb:254:in `block in run'
/path/gems/puma-2.9.1/lib/puma/thread_pool.rb:92:in `call'
/path/gems/puma-2.9.1/lib/puma/thread_pool.rb:92:in `block in spawn_thread'uby-2.1.project/gems/puma-2.9.1/lib/puma/server.rb:361:in `process_client'
/path/gems/puma-2.9.1/lib/puma/server.rb:254:in `block in run'
/path/gems/puma-2.9.1/lib/puma/thread_pool.rb:92:in `call'
/path/gems/puma-2.9.1/lib/puma/thread_pool.rb:92:in `block in spawn_thread'
uby-2.1.2@project/gems/puma-2.9.1/lib/puma/server.rb:361:in `process_client'
/path/gems/puma-2.9.1/lib/puma/server.rb:254:in `block in run'
/path/gems/puma-2.9.1/lib/puma/thread_pool.rb:92:in `call'
/path/gems/puma-2.9.1/lib/puma/thread_pool.rb:92:in `block in spawn_thread'
uby-2.1.2@project/gems/puma-2.9.1/lib/puma/server.rb:361:in `process_client'
/path/gems/puma-2.9.1/lib/puma/server.rb:254:in `block in run'
/path/gems/puma-2.9.1/lib/puma/thread_pool.rb:92:in `call'
/path/gems/puma-2.9.1/lib/puma/thread_pool.rb:92:in `block in spawn_thread'
Tried both on 0.1.31 and 0.9.0.pre, on Rails 4.0.0.
With an irregular model, like this:
class Basetrx < ActiveRecord::Base
establish_connection :trx
self.table_name = 'basetrx'
self.primary_key = :id
The normal find method
Basetrx.find(t_id)
will raise "can't modify frozen object" error, with the trace:
rack-mini-profiler (0.1.31) Ruby/lib/patches/sql_patches.rb:148:in `instance_variable_set'
rack-mini-profiler (0.1.31) Ruby/lib/patches/sql_patches.rb:148:in `send_query_prepared'
activerecord (4.0.0) lib/active_record/connection_adapters/postgresql_adapter.rb:776:in `exec_cache'
MiniProfiler causes Rails app to become unresponsive with the message "deadlock; recursive locking" when the storage backend becomes unavailable.
To reproduce:
This is only a problem for the administrators of the site, to whom the profiler is authorized.
The rails app is still running, and you can work around this by using pp=skip etc.
But the profiler should not cause the app to become unresponse - even if the backend disapears.
On initial load of all pages in our ruby application 4 async calls get sent out to the mini-profiler url, and then I get 4 'too much recursion' errors. And in the meanwhile (3 minutes) my browser hangs, and crashes regularly. If you need more information to replicate the bug, please let me know.
Env:
FF 25.0.1
OSX: 10.7.5
-MacBook Pro 17"
I have next Gemfile
gem 'rails'
gem 'pg', group: 'postgres'
gem 'mysql', group: 'mysql'
gem 'rack-mini-profiler', group: 'development'
SQL info is always empty. I read a note about gem order.
Looks like bundler load postgres
group after development
I cant move pg
gem out of group.
Is there any possible hack/solution how I can make sql profiling works?
Thanks!
When using profiler with jQuery 1.11.1, keyboard shortcut for showing / hiding profiler is not working. Instead, profiler is toggled on every key press.
This is probably due to load order of jquery.hotkeys plugin - it is loaded AFTER the 'keydown' event binding for shortcuts is set.
Environment:
Debian 6
Ruby 1.9.3p194
Rails 3.2.13
Phusion Passenger 3, 4
MySQL 5.1
rack-mini-profiler 0.9.0
We just upgraded from Passenger 3 Community Edition to Passenger 4 Enterprise Edition. With no other changes we found our app would error out immediately with a "can't modify frozen object" error in rack-mini-profiler/lib/patches/sql_patches.rb, line 50.
Changing the line from:
result.instance_variable_set("@miniprofiler_sql_id", ::Rack::MiniProfiler.record_sql(args[0], elapsed_time))
to:
result.instance_variable_set("@miniprofiler_sql_id", ::Rack::MiniProfiler.record_sql(args[0], elapsed_time)) unless result.nil?
...completely fixed the problem. I'll submit a pull request.
This has caused me a good amount of confusion and grief.
Its value is not documented and also not configurable.
IMO:
what is the value in limiting to 10? especially since it isn't sorted by decreasing time.
I try install rack-mini-profiler in ruby 1.8 version but it's not compatible.
I think it can be useful to add this information in gemspec and in the readme. Maybe the rails 2.3 information can be delete to because rails 2.3 not compatible to ruby 1.9
For pages handled by a mounted engine, the inserted script element looks like this
<script async="" type="text/javascript" id="mini-profiler" src="/foo-engine/mini-profiler-resources/includes.js?v=..." ...></script>
Note the source attribute, it is prefixed by "/foo-engine" (the mythical example engine). Unfortunately, rmp does not provide its script at that locating. The script is supposed to be at /mini-profiler-resources/includes.js.
As far as I can tell, the reason for the wrong path is that Rails sets env['SCRIPT_NAME'] to point at the engine's mount point. That parameter in turn is used by rmp to set up its script path.
A very hackish woraround I'm currently using is this change in Rack::MiniProfiler#call
#return serve_html(env) if path.start_with? @config.base_url_path
return serve_html(env) if path.include? @config.base_url_path
Is it possible you can release the EntityFramework6 project on Nuget?
(I assume this makes it possible to use EF6 with the MiniProfiler).
Just built a new Fedora 19 system.
Rails 4.0.1rc2, Ruby 2.0p247
The very first request to my app (in development mode) works fine, all others fail, the rails process is deadlocked in a Futex. If I disable the rack-mini-profiler gem this doesn't happen.
Edit: Just tried with Rails 4.0.0, same behavior.
Hi,
In our production environment, the following file returns a 404: /mini-profiler-resources/includes.css
The reason to this is that all our static resources (css, js, images...) are managed by a content delivery server that catches the requests based on the extension of the file and fetches the file directly on disc to optimize the delivery of those.
As includes.css
isn't actually in the assets directory, it fails to fetch it.
Would it be possible to give an option to allow this file to be precompiled alongside the other CSS files when using rake assets:precompile
?
Thanks
I can't seem to get counters to work. Rack::MiniProfiler.counter("foo") {โฆ}
does not raise an error, but I see no results in the profiler output.
I use Rack::Deflater by inserting in in application.rb like so:
config.middleware.insert_after ActionDispatch::Static, Rack::Deflater
then, after i do that, rack-mini-profiler inserts itself at position 0. so the first 2 middleware are:
use Rack::MiniProfiler
use Rack::Deflater
this can't work because rack-mini-profiler will try to inject html into a body that has already been compressed with gzip.
this is done here: https://github.com/MiniProfiler/rack-mini-profiler/blob/master/lib/mini_profiler_rails/railtie.rb#L42
a solution would be to simply make this configurable.
this issue was discussed in #27, although i don't quite understand which orderings were and were not working for @eileencodes -- i think she is describing the same thing i am, however I don't understand how the problem was solved in the end, since as far as i can tell it's impossible rack-mini-profiler to come before deflater.
i'm also surprised that not more people are complaining about this, since rack::deflater is quite popular. so, maybe i'm misunderstanding my own problem?
How would I hide rack-mini-profiler in staging unless I explicitly run Rack::MiniProfiler.authorize_request?
it seems the "staging" environment is for some reason handled like the development environment and rack_mini_profiler is always displayed.
When I click on "1 sql" to have the details of the request, I get this stack:
/Users/pierrecaserta/.rvm/gems/ruby-1.9.3-p551/gems/rack-mini-profiler-0.9.2/lib/mini_profiler/request_timer_struct.rb:75:in new' /Users/pierrecaserta/.rvm/gems/ruby-1.9.3-p551/gems/rack-mini-profiler-0.9.2/lib/mini_profiler/request_timer_struct.rb:75:in
add_sql'
/Users/pierrecaserta/.rvm/gems/ruby-1.9.3-p551/gems/rack-mini-profiler-0.9.2/lib/mini_profiler/profiling_methods.rb:8:in record_sql' /Users/pierrecaserta/.rvm/gems/ruby-1.9.3-p551/gems/rack-mini-profiler-0.9.2/lib/patches/sql_patches.rb:50:in
query'
/Users/pierrecaserta/.rvm/gems/ruby-1.9.3-p551/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in block in execute' /Users/pierrecaserta/.rvm/gems/ruby-1.9.3-p551/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract_adapter.rb:280:in
block in log'
/Users/pierrecaserta/.rvm/gems/ruby-1.9.3-p551/gems/activesupport-3.2.21/lib/active_support/notifications/instrumenter.rb:20:in instrument' /Users/pierrecaserta/.rvm/gems/ruby-1.9.3-p551/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract_adapter.rb:275:in
log'
I'm not sure If I just did not have found out how to do it or if it is not possible currently: Is there a way to minimize the miniprofiler so that the box is not visible anymore but can be maximazied at some pint. It often would be helpful when checkhing some CSS stuff and so on,
thanks!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.