mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #13328 from teohm/dbconsole_support_database_url
Fixed rails dbconsole to support DATABASE_URL
This commit is contained in:
commit
bd66532ae4
3 changed files with 73 additions and 32 deletions
|
@ -1,3 +1,7 @@
|
|||
* Add `ENV['DATABASE_URL']` support in `rails dbconsole`. Fixes #13320.
|
||||
|
||||
*Huiming Teo*
|
||||
|
||||
* Add `Application#message_verifier` method to return a message verifier.
|
||||
|
||||
This verifier can be used to generate and verify signed messages in the application.
|
||||
|
|
|
@ -81,14 +81,11 @@ module Rails
|
|||
|
||||
def config
|
||||
@config ||= begin
|
||||
cfg = begin
|
||||
YAML.load(ERB.new(IO.read("config/database.yml")).result)
|
||||
rescue SyntaxError, StandardError
|
||||
require APP_PATH
|
||||
Rails.application.config.database_configuration
|
||||
end
|
||||
|
||||
cfg[environment] || abort("No database is configured for the environment '#{environment}'")
|
||||
require APP_PATH
|
||||
ActiveRecord::ConnectionAdapters::ConnectionSpecification::Resolver.new(
|
||||
ENV['DATABASE_URL'],
|
||||
(Rails.application.config.database_configuration || {})
|
||||
).spec.config.stringify_keys
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -2,29 +2,72 @@ require 'abstract_unit'
|
|||
require 'rails/commands/dbconsole'
|
||||
|
||||
class Rails::DBConsoleTest < ActiveSupport::TestCase
|
||||
def teardown
|
||||
%w[PGUSER PGHOST PGPORT PGPASSWORD].each{|key| ENV.delete(key)}
|
||||
|
||||
|
||||
def setup
|
||||
Rails::DBConsole.const_set('APP_PATH', 'rails/all')
|
||||
end
|
||||
|
||||
def test_config
|
||||
Rails::DBConsole.const_set(:APP_PATH, "erb")
|
||||
def teardown
|
||||
Rails::DBConsole.send(:remove_const, 'APP_PATH')
|
||||
%w[PGUSER PGHOST PGPORT PGPASSWORD DATABASE_URL].each{|key| ENV.delete(key)}
|
||||
end
|
||||
|
||||
app_config({})
|
||||
capture_abort { Rails::DBConsole.new.config }
|
||||
assert aborted
|
||||
assert_match(/No database is configured for the environment '\w+'/, output)
|
||||
def test_config_with_db_config_only
|
||||
config_sample = {
|
||||
"test"=> {
|
||||
"adapter"=> "sqlite3",
|
||||
"host"=> "localhost",
|
||||
"port"=> "9000",
|
||||
"database"=> "foo_test",
|
||||
"user"=> "foo",
|
||||
"password"=> "bar",
|
||||
"pool"=> "5",
|
||||
"timeout"=> "3000"
|
||||
}
|
||||
}
|
||||
app_db_config(config_sample)
|
||||
assert_equal Rails::DBConsole.new.config, config_sample["test"]
|
||||
end
|
||||
|
||||
app_config(test: "with_init")
|
||||
assert_equal Rails::DBConsole.new.config, "with_init"
|
||||
def test_config_with_no_db_config
|
||||
app_db_config(nil)
|
||||
assert_raise(ActiveRecord::AdapterNotSpecified) {
|
||||
Rails::DBConsole.new.config
|
||||
}
|
||||
end
|
||||
|
||||
app_db_file("test:\n without_init")
|
||||
assert_equal Rails::DBConsole.new.config, "without_init"
|
||||
def test_config_with_database_url_only
|
||||
ENV['DATABASE_URL'] = 'sqlite3://foo:bar@localhost:9000/foo_test?pool=5&timeout=3000'
|
||||
app_db_config(nil)
|
||||
assert_equal Rails::DBConsole.new.config.sort, {
|
||||
"adapter"=> "sqlite3",
|
||||
"host"=> "localhost",
|
||||
"port"=> 9000,
|
||||
"database"=> "foo_test",
|
||||
"username"=> "foo",
|
||||
"password"=> "bar",
|
||||
"pool"=> "5",
|
||||
"timeout"=> "3000"
|
||||
}.sort
|
||||
end
|
||||
|
||||
app_db_file("test:\n <%= Rails.something_app_specific %>")
|
||||
assert_equal Rails::DBConsole.new.config, "with_init"
|
||||
|
||||
app_db_file("test:\n\ninvalid")
|
||||
assert_equal Rails::DBConsole.new.config, "with_init"
|
||||
def test_config_choose_database_url_if_exists
|
||||
ENV['DATABASE_URL'] = 'sqlite3://foo:bar@dburl:9000/foo_test?pool=5&timeout=3000'
|
||||
sample_config = {
|
||||
"test" => {
|
||||
"adapter"=> "sqlite3",
|
||||
"host"=> "localhost",
|
||||
"port"=> 9000,
|
||||
"database"=> "foo_test",
|
||||
"username"=> "foo",
|
||||
"password"=> "bar",
|
||||
"pool"=> "5",
|
||||
"timeout"=> "3000"
|
||||
}
|
||||
}
|
||||
app_db_config(sample_config)
|
||||
assert_equal Rails::DBConsole.new.config["host"], "dburl"
|
||||
end
|
||||
|
||||
def test_env
|
||||
|
@ -177,6 +220,10 @@ class Rails::DBConsoleTest < ActiveSupport::TestCase
|
|||
|
||||
private
|
||||
|
||||
def app_db_config(results)
|
||||
Rails.application.config.stubs(:database_configuration).returns(results)
|
||||
end
|
||||
|
||||
def dbconsole
|
||||
@dbconsole ||= Rails::DBConsole.new(nil)
|
||||
end
|
||||
|
@ -197,11 +244,4 @@ class Rails::DBConsoleTest < ActiveSupport::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def app_db_file(result)
|
||||
IO.stubs(:read).with("config/database.yml").returns(result)
|
||||
end
|
||||
|
||||
def app_config(result)
|
||||
Rails.application.config.stubs(:database_configuration).returns(result.stringify_keys)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue