aboutsummaryrefslogtreecommitdiffstats
path: root/railties/bin
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2005-04-30 15:37:45 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2005-04-30 15:37:45 +0000
commit54f2d1d944bb7577ef33ab086191992210f4788c (patch)
tree2362ded764df45f2d931cfe4d5f665f580067894 /railties/bin
parente6f3e5d90017f3f642dd2f4205679cc861a8a2ab (diff)
downloadrails-54f2d1d944bb7577ef33ab086191992210f4788c.tar.gz
rails-54f2d1d944bb7577ef33ab086191992210f4788c.tar.bz2
rails-54f2d1d944bb7577ef33ab086191992210f4788c.zip
Added console --profile for profiling an IRB session #1154 [bitsweat]. Changed console_sandbox into console --sandbox #1154 [bitsweat]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1261 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'railties/bin')
-rw-r--r--railties/bin/console13
-rw-r--r--railties/bin/console_sandbox6
-rw-r--r--railties/bin/profiler27
3 files changed, 27 insertions, 19 deletions
diff --git a/railties/bin/console b/railties/bin/console
index fa7acc1598..4ebcaa0b23 100644
--- a/railties/bin/console
+++ b/railties/bin/console
@@ -2,15 +2,18 @@
irb = RUBY_PLATFORM =~ /mswin32/ ? 'irb.bat' : 'irb'
require 'optparse'
-options = {}
+options = { :sandbox => false, :profile => false, :irb => irb }
OptionParser.new do |opt|
opt.on('-s', '--sandbox', 'Rollback database modifications on exit.') { |options[:sandbox]| }
+ opt.on('--profile', 'Profile the session and print results on exit.') { |options[:profile]| }
+ opt.on("--irb=[#{irb}]", 'Invoke a different irb.') { |options[:irb]| }
opt.parse!(ARGV)
end
-libs = " -r #{File.dirname(__FILE__)}/../config/environment"
-libs << " -r #{File.dirname(__FILE__)}/console_sandbox" if options[:sandbox]
-libs << " -r irb/completion"
+libs = " -r irb/completion"
+libs << " -r #{File.dirname(__FILE__)}/../config/environment"
+libs << " -r console_sandbox" if options[:sandbox]
+libs << " -r console_profile" if options[:profile]
ENV['RAILS_ENV'] = ARGV.first || 'development'
if options[:sandbox]
@@ -19,4 +22,4 @@ if options[:sandbox]
else
puts "Loading #{ENV['RAILS_ENV']} environment."
end
-exec "#{irb} #{libs}"
+exec "#{options[:irb]} #{libs} --prompt-mode simple"
diff --git a/railties/bin/console_sandbox b/railties/bin/console_sandbox
index 80f3dbc223..e69de29bb2 100644
--- a/railties/bin/console_sandbox
+++ b/railties/bin/console_sandbox
@@ -1,6 +0,0 @@
-ActiveRecord::Base.lock_mutex
-ActiveRecord::Base.connection.begin_db_transaction
-at_exit do
- ActiveRecord::Base.connection.rollback_db_transaction
- ActiveRecord::Base.unlock_mutex
-end
diff --git a/railties/bin/profiler b/railties/bin/profiler
index f0f14a2b99..d606a76abf 100644
--- a/railties/bin/profiler
+++ b/railties/bin/profiler
@@ -1,17 +1,28 @@
#!/usr/local/bin/ruby
if ARGV.empty?
- puts "Usage: profiler 'Person.expensive_method(10)' [times]"
+ $stderr.puts "Usage: profiler 'Person.expensive_method(10)' [times]"
exit
end
+# Keep the expensive require out of the profile.
+puts 'Loading Rails...'
require File.dirname(__FILE__) + '/../config/environment'
-require "profiler"
-# Don't include compilation in the profile
-eval(ARGV.first)
+# Default to a single execution.
+N = (ARGV[1] || 1).to_i
-Profiler__::start_profile
-(ARGV[1] || 1).to_i.times { eval(ARGV.first) }
-Profiler__::stop_profile
-Profiler__::print_profile($stdout) \ No newline at end of file
+# Define a method to profile.
+eval <<end_eval
+def profile_me
+ for i in 1..#{N}
+ #{ARGV[0]}
+ end
+end
+end_eval
+
+# Require the profiler at_exit wrapper from railties/lib.
+require 'console_profile'
+
+# Blast off!
+profile_me