Ruby 2.6.5 和 PostgreSQL pg-gem 段错误

标签 ruby postgresql ruby-on-rails-6

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

.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/pg-1.1.4/lib/pg.rb:56:[BUG] 0x0000000000000110 处出现段错误 ruby 2.6.5p114(2019-10-01 修订版 67812)[x86_64-darwin18]

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

--控制帧信息------------------------------------------------ -------- c:0071 p:---- s:0406 e:000405 CFUNC :初始化 c:0070 p:---- s:0403 e:000402 CFUNC :新 c:0069 p:0016 s:0398 e:000397 方法/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 方法/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 下有效,在控制台下失败!

为清楚起见进行编辑:

是的,使用 bundler 。

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

Gemfile.lock 有 pg (1.1.4)

我重新捆绑,指定捆绑路径。堆栈跟踪现在具有该捆绑路径,因此我猜默认捆绑程序正在使用 rbenv 路径。

最佳答案

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

Postgresql 12 中添加了 gssencmode:

gssencmode

This option determines whether or with what priority a secure GSS TCP/IP connection will be negotiated with the server.

此处跟踪潜在的错误 https://www.postgresql.org/message-id/93f7379b-2e2f-db0c-980e-07ebd5de92ff%40crunchydata.com

关于Ruby 2.6.5 和 PostgreSQL pg-gem 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59089991/

相关文章:

postgresql:何时使用数组构造函数与大括号

ruby-on-rails - 在 Rails 6.0 升级后,ActiveStorage 不会将 blob 持久化到附件

ruby-on-rails - 在 Rails 6 上定义 secret_key_base 的正确方法是什么?

ruby-on-rails - rails 6 : form with remote: true and Turbolinks not showing flash after redirect

ruby - 在 Ruby 中替换 Vector 的值

ruby-on-rails - 如何调用lib文件夹中的模块

postgresql - Phantom Postgres 表存在但不能删除?

ruby - 实现嵌套表单时的路由问题

Ruby 选择多个条件

python - 使用 Psycopg2 获得懒惰但可重复使用的游标