微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在具有多个数据库的 rails 6 中迁移时出现“ActiveRecord::StatementInvalid: PG::ConnectionBad: connection is closed”

如何解决在具有多个数据库的 rails 6 中迁移时出现“ActiveRecord::StatementInvalid: PG::ConnectionBad: connection is closed”

我使用 Rails 6.0.2.1 和多个数据库

我编写了一个迁移来添加对表的引用并使用查询设置认值。 运行迁移时遇到错误,我无法理解错误原因。

另外,我没有使用任何像章鱼这样的 gem 来管理多个数据库

迁移文件

class AddServicetoTinkLogs < ActiveRecord::Migration[6.0]
  def change
    TinkLog.connection.add_reference :tink_logs,:service,null: false,index: true,default: Service.find_by_name("tink").id
  end
end

同一任务的另一个迁移,不使用连接方法

class AddServicetoTinkLogs < ActiveRecord::Migration[6.0]
  def change
    add_reference :tink_logs,foreign_key: true,default: Service.find_by_name('tink').id
  end
end

迁移都运行成功,更改也反映在数据库中。但是执行迁移后仍然显示以下错误

== 20210316124201 AddServicetoTinkLogs: migrating =============================
== 20210316124201 AddServicetoTinkLogs: migrated (0.3611s) ====================

rails aborted!
ActiveRecord::StatementInvalid: PG::ConnectionBad: connection is closed
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:65:in `exec'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:65:in `block (2 levels) in query'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activesupport-6.0.2.1/lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activesupport-6.0.2.1/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activesupport-6.0.2.1/lib/active_support/dependencies/interlock.rb:47:in `permit_concurrent_loads'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:64:in `block in query'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:718:in `block (2 levels) in log'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:717:in `block in log'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activesupport-6.0.2.1/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:708:in `log'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:63:in `query'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/abstract/database_statements.rb:98:in `query_value'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/postgresql_adapter.rb:383:in `release_advisory_lock'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/migration.rb:1384:in `with_advisory_lock'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/migration.rb:1229:in `migrate'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/migration.rb:1061:in `up'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/migration.rb:1036:in `migrate'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/tasks/database_tasks.rb:238:in `migrate'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/railties/databases.rake:86:in `block (3 levels) in <main>'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/railties/databases.rake:84:in `each'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/railties/databases.rake:84:in `block (2 levels) in <main>'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/railties-6.0.2.1/lib/rails/commands/rake/rake_command.rb:23:in `block in perform'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/railties-6.0.2.1/lib/rails/commands/rake/rake_command.rb:20:in `perform'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/railties-6.0.2.1/lib/rails/command.rb:48:in `invoke'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/railties-6.0.2.1/lib/rails/commands.rb:18:in `<main>'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activesupport-6.0.2.1/lib/active_support/dependencies.rb:325:in `block in require'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activesupport-6.0.2.1/lib/active_support/dependencies.rb:291:in `load_dependency'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activesupport-6.0.2.1/lib/active_support/dependencies.rb:325:in `require'
bin/rails:4:in `<main>'

Caused by:
PG::ConnectionBad: connection is closed
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:65:in `exec'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:65:in `block (2 levels) in query'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activesupport-6.0.2.1/lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activesupport-6.0.2.1/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activesupport-6.0.2.1/lib/active_support/dependencies/interlock.rb:47:in `permit_concurrent_loads'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:64:in `block in query'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:718:in `block (2 levels) in log'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:717:in `block in log'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activesupport-6.0.2.1/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:708:in `log'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:63:in `query'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/abstract/database_statements.rb:98:in `query_value'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/postgresql_adapter.rb:383:in `release_advisory_lock'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/migration.rb:1384:in `with_advisory_lock'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/migration.rb:1229:in `migrate'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/migration.rb:1061:in `up'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/migration.rb:1036:in `migrate'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/tasks/database_tasks.rb:238:in `migrate'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/railties/databases.rake:86:in `block (3 levels) in <main>'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/railties/databases.rake:84:in `each'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activerecord-6.0.2.1/lib/active_record/railties/databases.rake:84:in `block (2 levels) in <main>'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/railties-6.0.2.1/lib/rails/commands/rake/rake_command.rb:23:in `block in perform'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/railties-6.0.2.1/lib/rails/commands/rake/rake_command.rb:20:in `perform'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/railties-6.0.2.1/lib/rails/command.rb:48:in `invoke'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/railties-6.0.2.1/lib/rails/commands.rb:18:in `<main>'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activesupport-6.0.2.1/lib/active_support/dependencies.rb:325:in `block in require'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activesupport-6.0.2.1/lib/active_support/dependencies.rb:291:in `load_dependency'
/home/bhavesh1/.rvm/gems/ruby-2.6.5@external_api/gems/activesupport-6.0.2.1/lib/active_support/dependencies.rb:325:in `require'
bin/rails:4:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

这里迁移成功,也做了修改

非常感谢任何帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。