我们在使用Ruby v.2.0.0-p247
的{{1}}申请中Rails v4.0.1
。
使用pg gem v0.17.0
安装了Mac OS X Mavericks v10.9
,PostgreSQL Server v9.2.4
下的应用程序可以顺利运行,但是使用HomeBrew
在Ubuntu v13.04
下会抛出以下异常:
PostgreSQL Server 9.1
PG::UnableToSend: server closed the connection unexpectedly
在事务性查询(表单提交)之后发生异常。
我使用This probably means the server terminated abnormally before or while processing the request.
尝试了以下内容:
database.yml
reconnect: true
port: 5432
在Ubuntu下使用PostgreSQL配置尝试了以下内容:
socket: /var/run/postgresq/SOCKET_FILE
并在PostgreSQL服务器上搜索可能的错误。也尝试过:
可能出现什么问题?
更新
12/03/2013:有人建议检查防火墙设置。 DEBUG
表示ufw status
已被停用。
12/08/2013:在尝试使用香草Rails应用程序并使用当前应用程序进行大量修改后,问题来自于ufw
gem。 rails4/activerecord-session_store
中的第47行是罪魁祸首。
答案 0 :(得分:4)
当你使用launchy的旧版本时,基本上会发生这种情况,并且在发布的git repo引用@infertux
上按照此issue在
exec
无法运行命令的极少数情况下 - 通常在无法打开文件时引发Errno::ENOENT
- Launchy会引发异常但不显示任何输出
您可以查看Gemfile.lock
,看看您是否使用的版本低于2.4.1 launchy
,我怀疑您在开发环境中使用letter_opener
Gem这取决于launchy
,因此将letter_opener
更新为1.2.0会将launchy
更新为2.4.0以上的版本,主要是2.4.2,此问题已修复
所有功劳都归功于@infertux
答案 1 :(得分:1)
如果您提供了database.yml文件,那将非常有用。
默认连接方法是unix域套接字,不要与TCP / IP套接字混淆。默认情况下使用unix域套接字连接方法。
您应检查您尝试运行rails的unix用户是否具有访问域套接字的足够权限(通常位于/var/run/postgresql/.s.PGSQL.5432
)
尝试输入以下作为rails用户:
psql
如果您收到数据库连接错误,那么如果postgres实际正在运行,则可能存在权限问题。
您可以检查/etc/postgresql.conf
文件,并让postgres在套接字启动时配置套接字和权限:
unix_socket_directory = '/var/run/postgresql' # dont worry if yours is different
#unix_socket_group = '' # default is usually ok
#unix_socket_permissions = 0777 # uncomment this if needed
另一种选择是将用户添加到对套接字具有写访问权限的组中,同时允许计算机上的所有用户使用上面的0777权限设置进行访问。如果默认Ubuntu组提供的粒度不足以满足您的需求,您可能需要为此目的创建postres_users
组。
答案 2 :(得分:0)
在我看来,对连接方法存在困惑。 PostgreSQL支持这两种方法:
这些完全不同。 : - )
在您的问题中,您显示socket
设置,但提及TCP。我建议把重点放在这两种独立连接方式中的每一种上,看看哪种方式产生结果。即,创建两个版本分支pg-socket
和pg-tcpip
只是为了使事情清楚。然后,清理配置文件并尝试通过这两种方法进行连接。
通常,套接字连接更容易,因为您只需要知道套接字“文件”的路径名。不需要任何软件设置(因为不涉及TCP / IP网络。)
执行此操作后更新您的问题,并告诉我们这两种方法中的每种方法是如何为您做的。
答案 3 :(得分:0)