Open liangjingyang opened 5 years ago
Run rake db:drop when we have no databases, and use_schemas = true.
rake db:drop
use_schemas = true
Do nothing just link Rails db:drop
db:drop
rake aborted! ActiveRecord::NoDatabaseError: FATAL: database "gitlabhq_test" does not exist /builds/persper/gitlab-ce/vendor/ruby/2.5.0/gems/activerecord-5.0.7.1/lib/active_record/connection_adapters/postgresql_adapter.rb:677:in `rescue in connect' /builds/persper/gitlab-ce/vendor/ruby/2.5.0/gems/activerecord-5.0.7.1/lib/active_record/connection_adapters/postgresql_adapter.rb:672:in `connect' /builds/persper/gitlab-ce/vendor/ruby/2.5.0/gems/activerecord-5.0.7.1/lib/active_record/connection_adapters/postgresql_adapter.rb:217:in `initialize' /builds/persper/gitlab-ce/vendor/ruby/2.5.0/gems/activerecord-5.0.7.1/lib/active_record/connection_adapters/postgresql_adapter.rb:37:in `new' /builds/persper/gitlab-ce/vendor/ruby/2.5.0/gems/activerecord-5.0.7.1/lib/active_record/connection_adapters/postgresql_adapter.rb:37:in `postgresql_connection' /builds/persper/gitlab-ce/vendor/ruby/2.5.0/gems/activerecord-5.0.7.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:729:in `new_connection' /builds/persper/gitlab-ce/vendor/ruby/2.5.0/gems/activerecord-5.0.7.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:773:in `checkout_new_connection' /builds/persper/gitlab-ce/vendor/ruby/2.5.0/gems/activerecord-5.0.7.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:752:in `try_to_checkout_new_connection' /builds/persper/gitlab-ce/vendor/ruby/2.5.0/gems/activerecord-5.0.7.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:713:in `acquire_connection' /builds/persper/gitlab-ce/vendor/ruby/2.5.0/gems/activerecord-5.0.7.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:490:in `checkout' /builds/persper/gitlab-ce/vendor/ruby/2.5.0/gems/activerecord-5.0.7.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:364:in `connection' /builds/persper/gitlab-ce/vendor/ruby/2.5.0/gems/activerecord-5.0.7.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:883:in `retrieve_connection' /builds/persper/gitlab-ce/vendor/ruby/2.5.0/gems/activerecord-5.0.7.1/lib/active_record/connection_handling.rb:128:in `retrieve_connection' /builds/persper/gitlab-ce/vendor/ruby/2.5.0/gems/activerecord-5.0.7.1/lib/active_record/connection_handling.rb:91:in `connection' /builds/persper/gitlab-ce/vendor/ruby/2.5.0/gems/apartment-2.2.0/lib/apartment/adapters/postgresql_adapter.rb:40:in `reset' /builds/persper/gitlab-ce/vendor/ruby/2.5.0/gems/apartment-2.2.0/lib/apartment/adapters/postgresql_adapter.rb:31:in `initialize' /builds/persper/gitlab-ce/vendor/ruby/2.5.0/gems/apartment-2.2.0/lib/apartment/adapters/postgresql_adapter.rb:10:in `new' /builds/persper/gitlab-ce/vendor/ruby/2.5.0/gems/apartment-2.2.0/lib/apartment/adapters/postgresql_adapter.rb:10:in `postgresql_adapter' /builds/persper/gitlab-ce/vendor/ruby/2.5.0/gems/apartment-2.2.0/lib/apartment/tenant.rb:47:in `adapter' /builds/persper/gitlab-ce/vendor/ruby/2.5.0/gems/apartment-2.2.0/lib/tasks/apartment.rake:23:in `block (3 levels) in <main>' /builds/persper/gitlab-ce/vendor/ruby/2.5.0/gems/apartment-2.2.0/lib/tasks/apartment.rake:20:in `each' /builds/persper/gitlab-ce/vendor/ruby/2.5.0/gems/apartment-2.2.0/lib/tasks/apartment.rake:20:in `block (2 levels) in <main>' /builds/persper/gitlab-ce/vendor/ruby/2.5.0/gems/rake-12.3.2/exe/rake:27:in `<top (required)>' /usr/local/bin/bundle:30:in `block in <main>' /usr/local/bin/bundle:22:in `<main>'
PostgreSQL 9.6
v2.2.0
config/initializers/apartment.rb
Apartment.configure do |config| config.use_schemas = true config.excluded_models = [] config.default_schema = "public" config.persistent_schemas = ['shared_extensions'] config.tenant_names = %w(public drepo_project_pending drepo_project_completed) end
5.0.7.1
ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-darwin17]
Beacuse of PostgreSQL and use_schemas = true, Apartment::Tenant.drop(tenant) will connect to the target database and reset search_path before drop schemas, but the target isn't exists. Maybe we can swallow ActiveRecord::NoDatabaseError in db:drop: https://github.com/influitive/apartment/blob/5211eb43185c176d99a1c05167fa2e8cf3587c27/lib/tasks/apartment.rake#L24 just like: https://github.com/influitive/apartment/blob/5211eb43185c176d99a1c05167fa2e8cf3587c27/lib/apartment/railtie.rb#L36
PostgreSQL
Apartment::Tenant.drop(tenant)
search_path
ActiveRecord::NoDatabaseError
Steps to reproduce
Run
rake db:drop
when we have no databases, anduse_schemas = true
.Expected behavior
Do nothing just link Rails
db:drop
Actual behavior
System configuration
PostgreSQL 9.6
v2.2.0
config/initializers/apartment.rb
or so):5.0.7.1
ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-darwin17]
Suggestion
Beacuse of
PostgreSQL
anduse_schemas = true
,Apartment::Tenant.drop(tenant)
will connect to the target database and resetsearch_path
before drop schemas, but the target isn't exists. Maybe we can swallowActiveRecord::NoDatabaseError
indb:drop
: https://github.com/influitive/apartment/blob/5211eb43185c176d99a1c05167fa2e8cf3587c27/lib/tasks/apartment.rake#L24 just like: https://github.com/influitive/apartment/blob/5211eb43185c176d99a1c05167fa2e8cf3587c27/lib/apartment/railtie.rb#L36