ady*_*uri 12 ruby sockets postgresql ruby-on-rails
当我运行rake db:migrate
或运行rails s
命令时,我得到相同的错误:
Error : 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"?
Run Code Online (Sandbox Code Playgroud)
我尝试时在浏览器中收到错误rails s
.
这是我的database.yml
default: &default
adapter: postgresql
encoding: unicode
pool: 5
development:
<<: *default
database: books_development
test:
<<: *default
database: books_test
production:
<<: *default
database: books_production
username: abd
password: <%= ENV['BOOKS_DATABASE_PASSWORD'] %>
Run Code Online (Sandbox Code Playgroud)
注意:我有数据库books_development
; books_test
; 当我尝试时,postresql运行没有问题sudo /etc/init.d/postgresql start
我跑了:
create database books_development;
create database books_test;
Run Code Online (Sandbox Code Playgroud)
在psql控制台中.它说成功完成了
我尝试了很多解决方案,我昨天花了很多时间寻找解决方案,相关问题没有解决方案解决了我的错误.
我有postgresql-9.4(最新版)和xubuntu 14.04版
有任何想法吗?
Dan*_*ité 13
为Debian或Debian衍生产品(如Ubuntu)打包的PostgreSQL约定是/var/run/postgresql
用作Unix域套接字的目录.另一方面,自编译的postgres客户端库的约定是使用/tmp
,除非另有自我配置.
因此,两者之间不匹配的常见根本原因是自编译的客户端内容与预编译的服务器端软件包的混合(即使客户端和服务器安装在同一台机器上,客户端和服务器端也是如此)仍然不同,可能不同步).
/tmp
如问题所建议的那样从该目录进行软链接工作,除了链接在每次重启时都会丢失,因为通常/tmp
在重启时清空.
更好的选择是添加作为条目database.yml
:
无论host: /tmp
是否真正插座路径/tmp
(自编服务器,客户端打包)
或者host: /var/run/postgresql
如果真正的套接字路径/var/run/postgresql/
(打包服务器,自编译客户端).
当host字段中的值以斜杠字符开头时,postgres库知道它是本地套接字的目录位置而不是主机名..s.PGSQL.portnumber
生成目录中的文件名,不得指定,只能指定目录.
另一种可能性是将自编译的软件包尽可能地与Debian配置,尽可能地覆盖默认值.
这意味着您的Postgres服务器没有运行。
从终端检查Postgres服务状态
sudo service postgresql status
Run Code Online (Sandbox Code Playgroud)
启用Postgres服务,如果未启动
sudo service postgresql start
Run Code Online (Sandbox Code Playgroud)
或者
sudo service postgresql restart
Run Code Online (Sandbox Code Playgroud)
现在,如果Postgres服务已成功启动,您的命令应该可以运行。
在Ubuntu 14.04中Is the server running locally and accepting connections on Unix domain socket “/var/run/postgresql/.s.PGSQL.5432”?
输入psql
postgres用户时遇到了同样的错误.我找不到现有的工作解决方案.
对我来说简短的回答是:我的安装创建了一个var/pgsql_socket
目录,但没有配置文件知道它.
1)找到postgres.conf
文件(它在etc/postgresql/9.6/main
我身上)
2)更改为listen_addresses = '*'
3)添加另一个unix socket目录
unix_socket_directories = '/var/run/postgresql, /var/pgsql_socket' # comma-separated list of directories
4)此时,sudo服务postgresql start尝试启动但没有权限创建锁文件.
* The PostgreSQL server failed to start. Please check the log output:
2016-10-05 17:14:55 CEST [28472-1] FATAL: could not create lock file "/var/pgsql_socket/.s.PGSQL.5432.lock": Permission denied
2016-10-05 17:14:55 CEST [28472-2] LOG: database system is shut down
5)更改权限(从Mark Berry的评论中找到)
$ sudo chown root.postgres /var/pgsql_socket
$ sudo chmod g+wx /var/pgsql_socket
6)sudo service postgresql start
sudo -i -u postgres
psql
这最终对我有用