diff --git a/railties/lib/rails/commands/console.rb b/railties/lib/rails/commands/console.rb index 86376ac7e6..d7c9e820dc 100644 --- a/railties/lib/rails/commands/console.rb +++ b/railties/lib/rails/commands/console.rb @@ -24,6 +24,9 @@ module Rails OptionParser.new do |opt| opt.banner = "Usage: console [environment] [options]" opt.on('-s', '--sandbox', 'Rollback database modifications on exit.') { |v| options[:sandbox] = v } + opt.on("-e", "--environment=name", String, + "Specifies the environment to run this console under (test/development/production).", + "Default: development") { |v| options[:environment] = v.strip } opt.on("--debugger", 'Enable ruby-debugging for the console.') { |v| options[:debugger] = v } opt.parse!(arguments) end @@ -36,6 +39,14 @@ module Rails options[:sandbox] end + def environment? + options[:environment] + end + + def set_environment! + Rails.env = options[:environment] + end + def debugger? options[:debugger] end @@ -45,6 +56,8 @@ module Rails require_debugger if debugger? + set_environment! if environment? + if sandbox? puts "Loading #{Rails.env} environment in sandbox (Rails #{Rails.version})" puts "Any modifications you make will be rolled back on exit" diff --git a/railties/test/commands/console_test.rb b/railties/test/commands/console_test.rb index 01847ae58c..9aa1d68675 100644 --- a/railties/test/commands/console_test.rb +++ b/railties/test/commands/console_test.rb @@ -55,6 +55,25 @@ class Rails::ConsoleTest < ActiveSupport::TestCase assert_match /Loading \w+ environment in sandbox \(Rails/, output end + def test_console_with_environment + app.expects(:sandbox=).with(nil) + FakeConsole.expects(:start) + + start ["-e production"] + + assert_match /production/, output + end + + def test_console_with_rails_environment + app.expects(:sandbox=).with(nil) + FakeConsole.expects(:start) + + start ["RAILS_ENV=production"] + + assert_match /production/, output + end + + def test_console_defaults_to_IRB config = mock("config", :console => nil) app = mock("app", :config => config)