Ruby 2.6.5 和 PostgreSQL pg-gem 分段错误

Posted

技术标签:

【中文标题】Ruby 2.6.5 和 PostgreSQL pg-gem 分段错误【英文标题】:Ruby 2.6.5 and PostgreSQL pg-gem segmentation fault 【发布时间】:2020-03-24 04:16:02 【问题描述】:

从控制台我无法执行任何涉及数据库的操作。我遇到了分段错误。

.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/pg-1.1.4/lib/pg.rb:56: [BUG] Segmentation fault at 0x0000000000000110 ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin18]

实际上是任何可能需要数据库的操作,包括 MyModel.new。

-- Control frame information ----------------------------------------------- c:0071 p:---- s:0406 e:000405 CFUNC :initialize c:0070 p:---- s:0403 e:000402 CFUNC :new c:0069 p:0016 s:0398 e:000397 METHOD /Users/xxx/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/pg-1.1.4/lib/pg.rb:56 c:0068 p:0107 s:0393 e:000392 METHOD /Users/xxx/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/connection_adapters/postgres

我已经卸载并重新安装了 pg gem。并重建了数据库。并重新启动 PostgreSQL。

我看到其他人在 Puma 下运行时报告了问题,但我的配置在 Puma 下运行,在控制台下失败!

为清楚起见进行编辑:

是的,使用捆绑器。

使用rails cbundle exec rails c 启动rails 控制台具有相同的效果(段错误)和相同的堆栈跟踪。

Gemfile.lock 有pg (1.1.4)

我重新捆绑,指定捆绑路径。堆栈跟踪现在有那个捆绑路径,所以我猜默认情况下捆绑器使用的是 rbenv 路径。

【问题讨论】:

您在项目中使用了 Bundler 吗? 我的想法是,因为它适用于 Puma,当您在控制台下运行时,Ruby 可能正在加载不正确的 pg 二进制扩展。如果您使用的是 Bundler,那么您应该不会从 rbenv gem 存储库中看到 gem 错误。在这种情况下,请尝试使用 bundle exec 运行控制台。 你是如何启动你的控制台的?您的 Gemfile.lock 是否显示与此处显示的相同版本的 pg? 有同样的问题; FWIW 我能够通过降级到 1.1.3 来修复它。似乎是由于缺少更多信息而关闭的 pg gem 错误:github.com/ged/ruby-pg/issues/291。您可能想向他们提供堆栈跟踪? 这与 macOS 附带的 GSS 库不兼容。此问题已开放并链接到其他相关跟踪器:github.com/ged/ruby-pg/issues/311 【参考方案1】:

根据问题的 cmets 部分中链接的 https://github.com/ged/ruby-pg/issues/291,将 gssencmode: disable 添加到 database.yml 会停止分段错误。我只在developmenttest 环境选项下添加了它,因为我不在其他环境中使用 OS X:

default: &default
  adapter: postgresql

development:
  <<: *default
  gssencmode: disable
test:
  <<: *default
  gssencmode: disable

gssencmode 已在 Postgresql 12 中添加:

gssencmode

此选项确定是否或以何种优先级与服务器协商安全 GSS TCP/IP 连接。

这里跟踪底层错误https://www.postgresql.org/message-id/93f7379b-2e2f-db0c-980e-07ebd5de92ff%40crunchydata.com

【讨论】:

非常感谢您的分享!!为这次特定崩溃提供的详细信息对未开化的人非常无益。 你拯救了我的一天。非常感谢!

以上是关于Ruby 2.6.5 和 PostgreSQL pg-gem 分段错误的主要内容,如果未能解决你的问题,请参考以下文章

ruby Rails负责转储和恢复PostgreSQL数据库的任务

ruby Rails负责转储和恢复PostgreSQL数据库的任务

ruby Rails负责转储和恢复PostgreSQL数据库的任务

在 macOS Big Sur 11.2.3 上安装 ruby​​、rails 和 postgresql 时安装 xcode 的问题

ruby sequel 和 postgreSQL - 客户端太多(连接)

如何在 Ruby 中使用 Where 子句 (PostgreSQL) 中的变量编写查询