我正在使用 postgresql 9.3 运行一个正在开发的 rails 应用程序。今天当我尝试启动乘客服务器时,我得到了:
PG::ConnectionBad - could not connect to server: Connection refused
Is the server running on host "localhost" (217.74.65.145) and accepting
TCP/IP connections on port 5432?
我认为没什么大不了的,以前也发生过这种情况。重新启动 postgres 总是能解决问题。所以我运行sudo service postgresql restart
并得到:
* Restarting PostgreSQL 9.3 database server
* The PostgreSQL server failed to start. Please check the log output:
2014-06-11 10:32:41 CEST LOG: could not bind IPv4 socket: Cannot assign requested address
2014-06-11 10:32:41 CEST HINT: Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2014-06-11 10:32:41 CEST WARNING: could not create listen socket for "localhost"
2014-06-11 10:32:41 CEST FATAL: could not create any TCP/IP sockets
...fail!
我postgresql.conf
指出默认值:localhost
和端口5432
。我尝试更改端口,但错误消息相同(端口更改除外)。
ps aux | grep postgresql
和均不ps aux | grep postmaster
返回任何内容。
编辑:
我将postgresql.conf
改为而不是,这样就成功了,服务器重新启动了。我还必须编辑应用程序的数据库配置并指向而不是。但是,现在的问题是,为什么 localhost 被认为是而不是?listen_addresses
127.0.0.1
localhost
127.0.0.1
localhost
217.74.65.145
127.0.0.1
那是我的/etc/hosts
:
127.0.0.1 local
127.0.1.1 jacek-X501A1
127.0.0.1 something.name.non.example.com
127.0.0.1 company.something.name.non.example.com
答案1
你的/etc/hosts
坏了。第一行应该是
127.0.0.1 localhost something.name.non.example.com company.something.name.non.example.com
答案2
我知道这个问题已经得到解答了,但对于那些仍然遇到错误的人来说,原因可能是其他某个进程已经启动了它。例如Homebrew
在系统启动时。
如果是这种情况,请尝试阻止它:
brew services stop postgres
答案3
对我来说,它是 Postgres 的监听地址:它被配置为在安装时可能连接到的网络上监听自己的 IP(而不是“localhost”)。
无论如何,打开postgresql.conf
并确认listen_addresses = 'localhost'
(或其他对你有意义的东西)。