【问题标题】:Having trouble connecting a project to a Postgresql database (Is the server running locally and accepting connections?)将项目连接到 Postgresql 数据库时遇到问题(服务器是否在本地运行并接受连接?)
【发布时间】:2021-08-24 19:55:50
【问题描述】:

我正在尝试将一个 ruby​​ on rails 项目连接到一个 postgresql 数据库,这样我就可以在完成后部署在 heroku 上。我试图自己挖掘答案,并且对 postgresql 以及如何调试的知识非常有限,所以如果您对我可以做些什么来解决这个问题有任何想法,请非常具体。

背景资料: 我已经完成了一个没有问题的项目,但这是一个新项目,由于另一个错误,我不得不卸载并重新安装 postgresql,我相信我现在有 postgresql 12。

我刚刚开始一个新项目,在运行 $rake db:create 时出现以下错误:

Database 'gachamons_backend_development' already exists
could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
Couldn't create 'gachamons_backend_test' database. Please check your configuration.
rails aborted!
ActiveRecord::NoDatabaseError: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
/mnt/c/users/adam/desktop/flatiron/gachamons-backend/bin/rails:5:in `<top (required)>'
/mnt/c/users/adam/desktop/flatiron/gachamons-backend/bin/spring:10:in `require'
/mnt/c/users/adam/desktop/flatiron/gachamons-backend/bin/spring:10:in `block in <top (required)>'
/mnt/c/users/adam/desktop/flatiron/gachamons-backend/bin/spring:7:in `tap'
/mnt/c/users/adam/desktop/flatiron/gachamons-backend/bin/spring:7:in `<top (required)>'

Caused by:
PG::ConnectionBad: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
/mnt/c/users/adam/desktop/flatiron/gachamons-backend/bin/rails:5:in `<top (required)>'
/mnt/c/users/adam/desktop/flatiron/gachamons-backend/bin/spring:10:in `require'
/mnt/c/users/adam/desktop/flatiron/gachamons-backend/bin/spring:10:in `block in <top (required)>'
/mnt/c/users/adam/desktop/flatiron/gachamons-backend/bin/spring:7:in `tap'
/mnt/c/users/adam/desktop/flatiron/gachamons-backend/bin/spring:7:in `<top (required)>'
Tasks: TOP => db:create
(See full trace by running task with --trace)

当我尝试使用 $service postgresql status 查看服务器是否已关闭时:

12/main (port 5432): down

$psql

psql: error: could not connect to server: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? 

我从另一篇帖子中看到运行 $dpkg -l | grep postgres 会产生这个我不明白如何调试的输出:

ii  postgresql                        12+214                             all          object-relational SQL database (supported version)
ii  postgresql-12                     12.2-4                             amd64        object-relational SQL database, version 12 server
ii  postgresql-client-12              12.2-4                             amd64        front-end programs for PostgreSQL 12
ii  postgresql-client-common          214                                all          manager for multiple PostgreSQL client versions
ii  postgresql-common                 214                                all          PostgreSQL database-cluster manager
ii  postgresql-contrib                12+214                             all          additional facilities for PostgreSQL (supported version)

然后我跑了$pg_lsclusters

12 main 5432 down postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log

终于$sudo service postgresql restart

* Restarting PostgreSQL 12 database server           * Error: /usr/lib/postgresql/12/bin/pg_ctl /usr/lib/postgresql/12/bin/pg_ctl start -D /var/lib/postgresql/12/main -l /var/log/postgresql/postgresql-12-main.log -s -o  -c config_file="/etc/postgresql/12/main/postgresql.conf"  exited with status 1: 
2021-08-24 15:48:39.458 EDT [4148] LOG:  starting PostgreSQL 12.2 (Ubuntu 12.2-4) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-8ubuntu1) 9.3.0, 64-bit
2021-08-24 15:48:39.460 EDT [4148] LOG:  could not bind IPv4 address "127.0.0.1": Permission denied
2021-08-24 15:48:39.460 EDT [4148] HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2021-08-24 15:48:39.460 EDT [4148] WARNING:  could not create listen socket for "localhost"
2021-08-24 15:48:39.460 EDT [4148] FATAL:  could not create any TCP/IP sockets
2021-08-24 15:48:39.461 EDT [4148] LOG:  database system is shut down
pg_ctl: could not start server
Examine the log output. 

编辑以包含 database.yml :

default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see Rails configuration guide
  # https://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: gachamons_backend_development
  host: localhost
  port: 5432
  user: postgres
  password: postgres

test:
  <<: *default
  database: gachamons_backend_test
  port: 5432
  user: postgres
  password: postgres

production:
  <<: *default
  url: <%= ENV['MY_APP_DATABASE_URL'] %>


这些都是我尝试调试的所有内容,但我不够熟悉,无法理解输出的含义。任何详细的解释,以便我下次可以理解,将不胜感激让我从 a 到 b。非常感谢。

【问题讨论】:

  • database.yml 在这里会非常有帮助。
  • @engineersmnky 感谢您的帮助!我编辑并添加了该信息!
  • 您的测试环境没有主机。这很可能是问题所在,因为它可以识别您的开发数据库并且仅在测试中失败。
  • @engineersmnky 这行得通我不敢相信这是所有研究之后的问题!你是生命的救星,谢谢!我是堆栈溢出的新手,有没有办法在评论中给你一个答案?
  • 没有 cmets 只是 cmets 但是我不知道我是否真的会认为这是一个“答案”。很高兴它对你有用,但我能够指出这更像是一个简单的疏忽。祝您好运,如果您还有其他无法找到答案的问题,请随时停下来。

标签: ruby-on-rails postgresql


【解决方案1】:

从上面的输出来看,postgresql 数据库已关闭。 在 postgresql 配置文件(/etc/postgresql/12/main/postgresql.conf)中,输入: listen_addresses='*'

然后重启postgresql。

【讨论】:

  • 非常感谢您的回复。有趣的是,我的文件是 postgresql/13 而不是 postgresql/12 不确定为什么或是否重要。我检查了该配置文件,并且已经包含了 listen_addresses='*' ...... :( 你还有其他想法吗?
  • 那么安装了 2 个实例。 1. PostgreSQL 12 2. PostgreSQL 13 尝试停止 postgresql 13,然后重新启动 postgresql 12,因为它们可能在同一端口 5432 上运行。
【解决方案2】:

用户@engineersmnky指出database.yml中的测试环境没有主机,尝试创建数据库时产生多个错误。

【讨论】:

    猜你喜欢
    • 2017-08-02
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 2021-07-17
    • 2020-02-20
    相关资源
    最近更新 更多