mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #30925 from bogdanvlviv/backport-30579-to-5-0-stable
Backport #30579
This commit is contained in:
commit
60437e6d3c
4 changed files with 89 additions and 12 deletions
|
@ -1,3 +1,26 @@
|
|||
* Fix `bin/rails db:setup` and `bin/rails db:test:prepare` create wrong
|
||||
ar_internal_metadata's data for a test database.
|
||||
|
||||
Before:
|
||||
```
|
||||
$ RAILS_ENV=test rails dbconsole
|
||||
> SELECT * FROM ar_internal_metadata;
|
||||
key|value|created_at|updated_at
|
||||
environment|development|2017-09-11 23:14:10.815679|2017-09-11 23:14:10.815679
|
||||
```
|
||||
|
||||
After:
|
||||
```
|
||||
$ RAILS_ENV=test rails dbconsole
|
||||
> SELECT * FROM ar_internal_metadata;
|
||||
key|value|created_at|updated_at
|
||||
environment|test|2017-09-11 23:14:10.815679|2017-09-11 23:14:10.815679
|
||||
```
|
||||
|
||||
Fixes #26731.
|
||||
|
||||
*bogdanvlviv*
|
||||
|
||||
* Fix longer sequence name detection for serial columns.
|
||||
|
||||
Fixes #28332.
|
||||
|
|
|
@ -323,7 +323,7 @@ db_namespace = namespace :db do
|
|||
begin
|
||||
should_reconnect = ActiveRecord::Base.connection_pool.active_connection?
|
||||
ActiveRecord::Schema.verbose = false
|
||||
ActiveRecord::Tasks::DatabaseTasks.load_schema ActiveRecord::Base.configurations['test'], :ruby, ENV['SCHEMA']
|
||||
ActiveRecord::Tasks::DatabaseTasks.load_schema ActiveRecord::Base.configurations["test"], :ruby, ENV["SCHEMA"], "test"
|
||||
ensure
|
||||
if should_reconnect
|
||||
ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations[ActiveRecord::Tasks::DatabaseTasks.env])
|
||||
|
@ -333,7 +333,7 @@ db_namespace = namespace :db do
|
|||
|
||||
# desc "Recreate the test database from an existent structure.sql file"
|
||||
task :load_structure => %w(db:test:purge) do
|
||||
ActiveRecord::Tasks::DatabaseTasks.load_schema ActiveRecord::Base.configurations['test'], :sql, ENV['SCHEMA']
|
||||
ActiveRecord::Tasks::DatabaseTasks.load_schema ActiveRecord::Base.configurations["test"], :sql, ENV["SCHEMA"], "test"
|
||||
end
|
||||
|
||||
# desc "Recreate the test database from a fresh schema"
|
||||
|
|
|
@ -215,22 +215,22 @@ module ActiveRecord
|
|||
class_for_adapter(configuration['adapter']).new(*arguments).structure_load(filename)
|
||||
end
|
||||
|
||||
def load_schema(configuration, format = ActiveRecord::Base.schema_format, file = nil) # :nodoc:
|
||||
def load_schema(configuration, format = ActiveRecord::Base.schema_format, file = nil, environment = env) # :nodoc:
|
||||
file ||= schema_file(format)
|
||||
|
||||
check_schema_file(file)
|
||||
ActiveRecord::Base.establish_connection(configuration)
|
||||
|
||||
case format
|
||||
when :ruby
|
||||
check_schema_file(file)
|
||||
ActiveRecord::Base.establish_connection(configuration)
|
||||
load(file)
|
||||
when :sql
|
||||
check_schema_file(file)
|
||||
structure_load(configuration, file)
|
||||
else
|
||||
raise ArgumentError, "unknown format #{format.inspect}"
|
||||
end
|
||||
ActiveRecord::InternalMetadata.create_table
|
||||
ActiveRecord::InternalMetadata[:environment] = ActiveRecord::Migrator.current_environment
|
||||
ActiveRecord::InternalMetadata[:environment] = environment
|
||||
end
|
||||
|
||||
def load_schema_for(*args)
|
||||
|
@ -251,8 +251,8 @@ module ActiveRecord
|
|||
end
|
||||
|
||||
def load_schema_current(format = ActiveRecord::Base.schema_format, file = nil, environment = env)
|
||||
each_current_configuration(environment) { |configuration|
|
||||
load_schema configuration, format, file
|
||||
each_current_configuration(environment) { |configuration, configuration_environment|
|
||||
load_schema configuration, format, file, configuration_environment
|
||||
}
|
||||
ActiveRecord::Base.establish_connection(environment.to_sym)
|
||||
end
|
||||
|
@ -289,9 +289,10 @@ module ActiveRecord
|
|||
environments = [environment]
|
||||
environments << 'test' if environment == 'development'
|
||||
|
||||
configurations = ActiveRecord::Base.configurations.values_at(*environments)
|
||||
configurations.compact.each do |configuration|
|
||||
yield configuration unless configuration['database'].blank?
|
||||
ActiveRecord::Base.configurations.slice(*environments).each do |configuration_environment, configuration|
|
||||
next unless configuration["database"]
|
||||
|
||||
yield configuration, configuration_environment
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -196,6 +196,16 @@ module ApplicationTests
|
|||
db_structure_dump_and_load database_url_db_name
|
||||
end
|
||||
|
||||
test "db:structure:dump and db:structure:load set ar_internal_metadata" do
|
||||
require "#{app_path}/config/environment"
|
||||
db_structure_dump_and_load ActiveRecord::Base.configurations[Rails.env]["database"]
|
||||
|
||||
Dir.chdir(app_path) do
|
||||
assert_equal "test", `bin/rails runner -e test "puts ActiveRecord::InternalMetadata[:environment]"`.strip
|
||||
assert_equal "development", `bin/rails runner "puts ActiveRecord::InternalMetadata[:environment]"`.strip
|
||||
end
|
||||
end
|
||||
|
||||
test 'db:structure:dump does not dump schema information when no migrations are used' do
|
||||
Dir.chdir(app_path) do
|
||||
# create table without migrations
|
||||
|
@ -308,6 +318,49 @@ module ApplicationTests
|
|||
ENV["RACK_ENV"] = @old_rack_env
|
||||
end
|
||||
end
|
||||
|
||||
test "db:setup sets ar_internal_metadata" do
|
||||
Dir.chdir(app_path) do
|
||||
app_file "db/schema.rb", ""
|
||||
`bin/rails db:setup`
|
||||
|
||||
test_environment = lambda { `bin/rails runner -e test "puts ActiveRecord::InternalMetadata[:environment]"`.strip }
|
||||
development_environment = lambda { `bin/rails runner "puts ActiveRecord::InternalMetadata[:environment]"`.strip }
|
||||
|
||||
assert_equal "test", test_environment.call
|
||||
assert_equal "development", development_environment.call
|
||||
|
||||
app_file "db/structure.sql", ""
|
||||
app_file "config/initializers/enable_sql_schema_format.rb", <<-RUBY
|
||||
Rails.application.config.active_record.schema_format = :sql
|
||||
RUBY
|
||||
|
||||
`bin/rails db:setup`
|
||||
|
||||
assert_equal "test", test_environment.call
|
||||
assert_equal "development", development_environment.call
|
||||
end
|
||||
end
|
||||
|
||||
test "db:test:prepare sets test ar_internal_metadata" do
|
||||
Dir.chdir(app_path) do
|
||||
app_file "db/schema.rb", ""
|
||||
`bin/rails db:test:prepare`
|
||||
|
||||
test_environment = lambda { `bin/rails runner -e test "puts ActiveRecord::InternalMetadata[:environment]"`.strip }
|
||||
|
||||
assert_equal "test", test_environment.call
|
||||
|
||||
app_file "db/structure.sql", ""
|
||||
app_file "config/initializers/enable_sql_schema_format.rb", <<-RUBY
|
||||
Rails.application.config.active_record.schema_format = :sql
|
||||
RUBY
|
||||
|
||||
`bin/rails db:test:prepare`
|
||||
|
||||
assert_equal "test", test_environment.call
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue