aboutsummaryrefslogtreecommitdiffstats
path: root/railties
diff options
context:
space:
mode:
Diffstat (limited to 'railties')
-rw-r--r--railties/CHANGELOG.md3
-rw-r--r--railties/lib/rails/application/configuration.rb8
-rw-r--r--railties/test/application/rake/dbs_test.rb15
3 files changed, 21 insertions, 5 deletions
diff --git a/railties/CHANGELOG.md b/railties/CHANGELOG.md
index 85069fbd9a..e2f2148911 100644
--- a/railties/CHANGELOG.md
+++ b/railties/CHANGELOG.md
@@ -1,4 +1,7 @@
## Rails 4.0.0 (unreleased) ##
+* fix rake db:* tasks to work with DATABASE_URL and without config/database.yml
+
+ *Terence Lee*
* Add notice message for destroy action in scaffold generator.
diff --git a/railties/lib/rails/application/configuration.rb b/railties/lib/rails/application/configuration.rb
index 2c7ddd86e7..1b88b834c7 100644
--- a/railties/lib/rails/application/configuration.rb
+++ b/railties/lib/rails/application/configuration.rb
@@ -101,8 +101,12 @@ module Rails
# contents of the file are processed via ERB before being sent through
# YAML::load.
def database_configuration
- require 'erb'
- YAML.load ERB.new(IO.read(paths["config/database"].first)).result
+ if ENV['DATABASE_URL']
+ {Rails.env => ActiveRecord::ConnectionAdapters::ConnectionSpecification::Resolver.connection_url_to_hash(ENV['DATABASE_URL']).stringify_keys}
+ else
+ require 'erb'
+ YAML.load ERB.new(IO.read(paths["config/database"].first)).result
+ end
rescue Psych::SyntaxError => e
raise "YAML syntax error occurred while parsing #{paths["config/database"].first}. " \
"Please note that YAML must be consistently indented using spaces. Tabs are not allowed. " \
diff --git a/railties/test/application/rake/dbs_test.rb b/railties/test/application/rake/dbs_test.rb
index ccb47663d4..820b838702 100644
--- a/railties/test/application/rake/dbs_test.rb
+++ b/railties/test/application/rake/dbs_test.rb
@@ -21,6 +21,8 @@ module ApplicationTests
def set_database_url
ENV['DATABASE_URL'] = "sqlite3://:@localhost/#{database_url_db_name}"
+ # ensure it's using the DATABASE_URL
+ FileUtils.rm_rf("#{app_path}/config/database.yml")
end
def expected
@@ -166,9 +168,16 @@ module ApplicationTests
end
test 'db:test:load_structure with database_url' do
- require "#{app_path}/config/environment"
- set_database_url
- db_test_load_structure
+ old_rails_env = ENV["RAILS_ENV"]
+ ENV["RAILS_ENV"] = 'test'
+
+ begin
+ require "#{app_path}/config/environment"
+ set_database_url
+ db_test_load_structure
+ ensure
+ ENV["RAILS_ENV"] = old_rails_env
+ end
end
end
end