diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-02-20 07:10:36 -0800 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-02-20 07:10:36 -0800 |
commit | 3a0b6c8e135e268c1550f93db1b63ba27457dec2 (patch) | |
tree | a192d86909d0f404a81eb3518bb106336c8f673b | |
parent | ebae71a67a6c4d0421efd932b2af88c48b8b1c7c (diff) | |
parent | b1de1892bc0f228da307346e029c37602ff3f5a8 (diff) | |
download | rails-3a0b6c8e135e268c1550f93db1b63ba27457dec2.tar.gz rails-3a0b6c8e135e268c1550f93db1b63ba27457dec2.tar.bz2 rails-3a0b6c8e135e268c1550f93db1b63ba27457dec2.zip |
Merge pull request #9120 from hone/db_migrate_with_database_url
fix rake db:migrate when used with ENV['DATABASE_URL']
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/connection_specification.rb | 4 | ||||
-rw-r--r-- | activerecord/lib/active_record/railtie.rb | 4 | ||||
-rw-r--r-- | railties/CHANGELOG.md | 3 | ||||
-rw-r--r-- | railties/lib/rails/application/configuration.rb | 8 | ||||
-rw-r--r-- | railties/test/application/rake/dbs_test.rb | 15 |
5 files changed, 24 insertions, 10 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/connection_specification.rb b/activerecord/lib/active_record/connection_adapters/connection_specification.rb index 873f1ad3d4..5b60185f53 100644 --- a/activerecord/lib/active_record/connection_adapters/connection_specification.rb +++ b/activerecord/lib/active_record/connection_adapters/connection_specification.rb @@ -38,7 +38,7 @@ module ActiveRecord private def resolve_string_connection(spec) # :nodoc: hash = configurations.fetch(spec) do |k| - connection_url_to_hash(k) + self.class.connection_url_to_hash(k) end raise(AdapterNotSpecified, "#{spec} database is not configured") unless hash @@ -69,7 +69,7 @@ module ActiveRecord SIMPLE_INT = /\A\d+\z/ SIMPLE_FLOAT = /\A\d+\.\d+\z/ - def connection_url_to_hash(url) # :nodoc: + def self.connection_url_to_hash(url) # :nodoc: config = URI.parse url adapter = config.scheme adapter = "postgresql" if adapter == "postgres" diff --git a/activerecord/lib/active_record/railtie.rb b/activerecord/lib/active_record/railtie.rb index aceb70bc45..a979be6999 100644 --- a/activerecord/lib/active_record/railtie.rb +++ b/activerecord/lib/active_record/railtie.rb @@ -141,9 +141,7 @@ module ActiveRecord # and then establishes the connection. initializer "active_record.initialize_database" do |app| ActiveSupport.on_load(:active_record) do - unless ENV['DATABASE_URL'] - self.configurations = app.config.database_configuration - end + self.configurations = app.config.database_configuration establish_connection end end 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 |