简体   繁体   中英

Configuring Backup gem in Rails 5.2 - Performing backup of PostgreSQL database

I would like to perform a regular backup of a PostgreSQL database, my current intention is to use the Backup and Whenever gems. I am relatively new to Rails and Postgres, so there is every chance I am making a very simple mistake...

I am currently trying to setup the process on my development machine (MAC), but keep getting an error when trying to connect to the database.

In the terminal window, I have performed the following to check the details of my database and connection:

psql -d my_db_name
my_db_name=# \conninfo
You are connected to database "my_db_name" as user "my_MAC_username" via socket in "/tmp" at port "5432".
\q

I have also manually created a backup of the database:

pg_dump -U my_MAC_username -p 5432 my_db_name > name_of_backup_file

However, when I try to repeat this within db_backup.rb (created by the Backup gem) I get the following error:

[2018/10/03 19:59:00][error] Model::Error: Backup for Description for db_backup (db_backup) Failed!
 --- Wrapped Exception ---
 Database::PostgreSQL::Error: Dump Failed!
 Pipeline STDERR Messages:
 (Note: may be interleaved if multiple commands returned error messages)

 pg_dump: [archiver (db)] connection to database "my_db_name" failed: could not connect to server: No such file or directory
 Is the server running locally and accepting
 connections on Unix domain socket "/tmp/pg.sock/.s.PGSQL.5432"?
 The following system errors were returned:
 Errno::EPERM: Operation not permitted - 'pg_dump' returned exit code: 1

The contents of my db_backup.rb :

Model.new(:db_backup, 'Description for db_backup') do

  ##
  # PostgreSQL [Database]
  #
  database PostgreSQL do |db|
    # To dump all databases, set `db.name = :all` (or leave blank)
    db.name               = "my_db_name"
    db.username           = "my_MAC_username" 
    #db.password           = "" 
    db.host               = "localhost"
    db.port               = 5432
    db.socket             = "/tmp/pg.sock"
    # When dumping all databases, `skip_tables` and `only_tables` are ignored.
    # db.skip_tables        = ["skip", "these", "tables"]
    # db.only_tables        = ["only", "these", "tables"]
    # db.additional_options = ["-xc", "-E=utf8"]
  end
end

Please could you suggest what I need to do to resolve this issue and perform the same backup through the db_backup.rb code

In case someone else gets stuck in a similar situation, the key to unlocking this problem was the lines:

psql -d my_db_name
my_db_name=# \conninfo

I realised that I needed to change db.socket = "/tmp/pg.sock" to db.socket = "/tmp" , which seems to have resolved the issue.

However, I don't understand why the path on my computer differs to the default as I didn't do anything to customise the installation of any gems or the Postgres App

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM