首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PG::UnableToSend:服务器意外地用ruby on关闭了连接

PG::UnableToSend:服务器意外地用ruby on关闭了连接
EN

Stack Overflow用户
提问于 2021-03-24 10:46:32
回答 1查看 172关注 0票数 1
代码语言:javascript
复制
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任务代码。I有一个12.6的Postgres版本。 Rails 6.0.3.4

代码语言:javascript
复制
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.
):**
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-24 11:37:10

在终止pg进程Id之前,应取消连接特权以避免新连接。

代码语言:javascript
复制
REVOKE CONNECT ON DATABASE DB_NAME FROM PUBLIC, DB_USERNAME;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66779406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档