关于ruby on rails:服务器是否在主机“localhost”(:: 1)上运行并接受端口5432上的TCP / IP连接?

Is the server running on host “localhost” (::1) and accepting TCP/IP connections on port 5432?

在此之前,请注意我在Stack Overflow和网络上的文章中发现了几个类似的问题,但这些都没有帮助我解决我的问题:

  • PG错误无法连接到服务器:连接被拒绝服务器是否在端口5432上运行?
  • PG :: ConnectionBad - 无法连接到服务器:连接被拒绝
  • psql:无法连接到服务器:连接被拒绝

现在,问题在于:

  • 我有一个像魅力一样的Rails应用程序。
  • 与我的合作者一起,我们使用GitHub一起工作。
  • 我们有一个master和一个mvp分支。
  • 我最近用Homebrew(Mac)更新了我的git版本。
  • 我们使用Foreman在本地启动我们的应用程序。

现在,当我尝试在本地启动应用程序时,出现以下错误:

1
2
3
4
5
6
7
PG::ConnectionBad at /
could not connect to server: Connection refused
    Is the server running on host"localhost" (::1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host"localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5432?

我试图多次重启计算机。

我还检查了/usr/local/var/postgres的内容:

1
2
3
4
PG_VERSION      pg_dynshmem     pg_multixact    pg_snapshots    pg_tblspc       postgresql.conf
base            pg_hba.conf     pg_notify       pg_stat         pg_twophase     postmaster.opts
global          pg_ident.conf   pg_replslot     pg_stat_tmp     pg_xlog         server.log
pg_clog         pg_logical      pg_serial       pg_subtrans     postgresql.auto.conf

如您所见,那里没有postmaster.pid文件。

知道如何解决这个问题吗?


运行postgres -D /usr/local/var/postgres,你应该看到类似的东西:

1
2
 FATAL:  lock file"postmaster.pid" already exists
 HINT:   Is another postmaster (PID 379) running in data directory"/usr/local/var/postgres"?

然后在HINT中运行kill -9 PID

你应该好好去。


你很可能没电了,你的postgresql服务器没有正确关机。

最简单的解决方法是下载官方postgresql应用程序并启动它:它将强制服务器启动(http://postgresapp.com/)


很可能是因为您的系统意外关闭

尝试

1
postgres -D /usr/local/var/postgres

你可能会看到

1
2
FATAL:  lock file"postmaster.pid" already exists
HINT:  Is another postmaster (PID 449) running in data directory"/usr/local/var/postgres"?

然后试试

1
kill -9 PID

1
kill -9 419

它应该正常开始postgres


它可能就像postgresql服务失败一样简单。试试跑步:

1
sudo service postgresql start

这解决了我的问题。


这适用于我的情况:

1
2
3
brew uninstall postgresql
rm -fr /usr/local/var/postgres/
brew install postgresql

这可以是因为意外关闭而没有删除为postgress创建的pid文件。因此,要解决此问题,请删除此pid文件。

  • 找到postgres数据目录。在使用自制程序的MAC上,它是/usr/local/var/postgres/,其他系统可能是/usr/var/postgres/

  • 删除pid文件

    rm postmaster.pid

  • 重新启动postgress。在Mac上,

    brew服务重启postgresql


  • 我通过这个命令解决了这个问题

    1
    pg_ctl -D /usr/local/var/postgres start

    有时,您可能会收到此错误

    1
    pg_ctl: another server might be running; trying to start server anyway

    因此,尝试运行以下命令,然后运行上面给出的第一个命令。

    1
    pg_ctl -D /usr/local/var/postgres stop


    我运行postgresql(mac)的Ruby on Rails应用程序几乎同样出错了。这对我有用:

    1
    brew services restart postgresql

    如果要在Linux上重新启动Postgresql,则必须使用以下命令。

    /etc/init.d/postgresql restart


    对于Docker用户:在我的情况下,它是由过多的docker镜像大小引起的。您可以使用prune命令删除未使用的数据:

    1
    docker system prune --all --force --volumes

    警告:根据手册(docker system prune --help):

    This will remove:

    • all stopped containers
    • all networks not used by at least one container
    • all dangling images
    • all dangling build cache

    首先我试过了

    lsof -wni tcp:5432
    but it doesn't show any PID number.

    我试过第二次

    Postgres -D /usr/local/var/postgres
    and it showed that server is listening.

    所以我只是重新启动我的mac以恢复所有端口,它对我有用。


    这对我有用:

    sudo lsof -i :

    之后它将显示当前附加到过程的PID。

    之后运行sudo kill -9

    如果那不起作用,
    尝试user8376606提供的解决方案,它肯定会工作!


    我经常在Windows上遇到这个问题,我解决问题的方法是服务 - 点击PostgreSQL数据库服务器8.3 - 点击第二个标签"登录" - 选择第一行"本地系统帐户"。