Ruby 2.6.5和PostgreSQL pg-gem分段错误

lbsnaicq  于 12个月前  发布在  Ruby
关注(0)|答案(2)|浏览(101)

从控制台我不能做任何涉及数据库的操作。我得到一个分割错误。
.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控制台具有相同的效果(segfault),具有相同的堆栈跟踪。
Gemfile.lock有pg (1.1.4)
我重新捆绑,指定一个捆绑路径。堆栈跟踪现在有了这个bundle路径,所以我猜在默认情况下,Replayer使用的是rbenv路径。

ma8fv8wu

ma8fv8wu1#

根据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

whhtz7ly

whhtz7ly2#

帮助我

  • 将postgres降级到12
  • 在本地安装openssl 1.1
  • 删除所有的宝石,Ruby,甚至rvm,并重新安装openssl 1.1(我用rbenv,但不是100%肯定,这是必要的)

相关问题