【问题标题】:PG::UnableToSend: server closed the connection unexpectedly with ruby on railsPG::UnableToSend:服务器使用 ruby​​ on rails 意外关闭了连接
【发布时间】:2021-03-24 10:46:32
【问题描述】:
namespace :db do
  desc 'Force close database connection'
  task hard_reset: :environment do
    Rails.logger.info "=============> Start of rake task db:hard_reset..."
    conn = ActiveRecord::Base.connection
    db_config = YAML.load_file(Rails.root.join('config', 'database.yml'))[Rails.env]
    # Terminate all connections except our current one
    # Close the connection behind us
    # conn.execute("ALTER DATABASE #{db_config['database']} WITH ALLOW_CONNECTIONS false")

    conn.execute("SELECT
                    pg_terminate_backend (pid)
                  FROM
                    pg_stat_activity
                  WHERE
                    pid <> pg_backend_pid ()
                  AND datname = '#{db_config['database']}';")

    ActiveRecord::Base.connection.close
    # Invoke a task now all connections are gone
    result = ActiveRecord::Base.clear_all_connections!
    Rails.logger.info "=============> Result on clear connection...#{result}"

    Rails.logger.info "=============> Start db:drop..."
    **Rake::Task['db:drop'].invoke**
    Rails.logger.info "=============> Finish db:drop..."
    Rails.logger.info "=============> Start db:create..."
    Rake::Task['db:create'].invoke
    Rails.logger.info "=============> Finish db:create..."
    Rails.logger.info "=============> Finish of rake task db:hard_reset..."
  end
end

我有一个自动生产转储恢复功能,该功能在暂存和开发上运行良好,但是当我尝试在生产服务器上运行我的功能时,它给了我以下错误。你可以检查我上面提到的 rake 任务代码。 我有 12.6 Postgres 版本。 Rails 6.0.3.4

D, [2021-03-24T06:49:41.427472 #4178872] DEBUG -- :    (2.4ms)  SELECT
                    pg_terminate_backend (pid)
                  FROM
                    pg_stat_activity
                  WHERE
                    pid <> pg_backend_pid ()
                  AND datname = 'database_production';
I, [2021-03-24T06:49:56.447235 #4178872]  INFO -- : =============> Start db:drop...
D, [2021-03-24T06:49:56.472527 #4178872] DEBUG -- :    (0.7ms)  SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
D, [2021-03-24T06:49:56.478579 #4178872] DEBUG -- :    (0.5ms)  SELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1  [["key", "environment"]]
D, [2021-03-24T06:49:56.480838 #4178872] DEBUG -- :    (0.4ms)  SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
D, [2021-03-24T06:49:56.482962 #4178872] DEBUG -- :    (0.3ms)  SELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1  [["key", "environment"]]
D, [2021-03-24T06:49:56.484881 #4178872] DEBUG -- :    (0.4ms)  SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
D, [2021-03-24T06:49:56.486878 #4178872] DEBUG -- :    (0.3ms)  SELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1  [["key", "environment"]]
I, [2021-03-24T06:49:56.505533 #4178635]  INFO -- : [ActiveJob] [RestoreSetupJob] [ed42fb71-cdd8-4b46-a12f-bc970fb36d77] =============> Status error_in_killing_process method... false
D, [2021-03-24T06:49:56.509494 #4178635] DEBUG -- : [ActiveJob] [RestoreSetupJob] [ed42fb71-cdd8-4b46-a12f-bc970fb36d77]    (0.9ms)  BEGIN
E, [2021-03-24T06:49:56.510113 #4178635] ERROR -- : [ActiveJob] [RestoreSetupJob] [ed42fb71-cdd8-4b46-a12f-bc970fb36d77] Error performing RestoreSetupJob (Job ID: ed42fb71-cdd8-4b46-a12f-bc970fb36d77) from Async(default) in 17250.16ms: 
**ActiveRecord::StatementInvalid (PG::UnableToSend: server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.
):**

【问题讨论】:

    标签: ruby-on-rails postgresql


    【解决方案1】:

    在终止 pg 进程 ID 之前,您应该撤销连接权限 避免新的连接。

    REVOKE CONNECT ON DATABASE DB_NAME FROM PUBLIC, DB_USERNAME;
    

    【讨论】:

      猜你喜欢
      • 2012-09-29
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      • 2015-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      相关资源
      最近更新 更多