Skip to content

Commit

Permalink
Merge pull request #5550 from schneems/schneems/server_env
Browse files Browse the repository at this point in the history
Fix environment support for rails server, and match interface of rails console
  • Loading branch information
tenderlove committed Mar 23, 2012
2 parents 86cd1b1 + 7529283 commit e944b29
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 0 deletions.
13 changes: 13 additions & 0 deletions railties/lib/rails/commands/console.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ def options
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
Expand All @@ -36,6 +39,14 @@ def sandbox?
options[:sandbox]
end

def environment?
options[:environment]
end

def set_environment!
Rails.env = options[:environment]
end

def debugger?
options[:debugger]
end
Expand All @@ -45,6 +56,8 @@ def start

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"
Expand Down
5 changes: 5 additions & 0 deletions railties/lib/rails/commands/server.rb
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ def parse!(args)

opt_parser.parse! args

# Handle's environment like RAILS_ENV=production passed in directly
if index = args.index {|arg| arg.include?("RAILS_ENV")}
options[:environment] ||= args.delete_at(index).split('=').last
end

options[:server] = args.shift
options
end
Expand Down
19 changes: 19 additions & 0 deletions railties/test/commands/console_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,25 @@ def test_start_with_sandbox
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)
Expand Down
26 changes: 26 additions & 0 deletions railties/test/commands/server_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
require 'abstract_unit'
require 'rails/commands/server'

class Rails::ServerTest < ActiveSupport::TestCase

def test_environment_with_server_option
args = ["thin", "RAILS_ENV=production"]
options = Rails::Server::Options.new.parse!(args)
assert_equal 'production', options[:environment]
assert_equal 'thin', options[:server]
end

def test_environment_without_server_option
args = ["RAILS_ENV=production"]
options = Rails::Server::Options.new.parse!(args)
assert_equal 'production', options[:environment]
assert_nil options[:server]
end

def test_server_option_without_environment
args = ["thin"]
options = Rails::Server::Options.new.parse!(args)
assert_nil options[:environment]
assert_equal 'thin', options[:server]
end
end

0 comments on commit e944b29

Please sign in to comment.