升级到 Ruby 2.2.0 后出现符号查找错误

Symbol lookup error since upgrading to Ruby 2.2.0

我得到这个错误,因为升级到 2.2.0,只有当一个 http 请求发送到 puma:

时才会发生
puma 2.10.2 (tcp://0.0.0.0:22555): symbol lookup error: 
  /usr/lib/ruby/gems/2.2.0/extensions/x86_64-linux/2.2.0/do_postgres-0.10.14/do_postgres/do_postgres.so: 
  undefined symbol: rb_thread_select

这是什么原因以及如何解决?

降级到 2.1.5 无论如何都会解决这个问题。

0.14.1版本之前的pggem使用方法rb_thread_select。 Ruby 2.2 中删除了此方法。根据their history file,2013年3月发布的0.15.0版本不再使用:

== v0.15.0 [2013-03-03] Michael Granger <ged@FaerieMUD.org>

[...]

Enhancements:

- Make use of rb_thread_fd_select() on Ruby 1.9 and avoid deprecated
  rb_thread_select().

[...]

所以您可能正在使用旧的 pg gem。将此 gem 升级到至少 0.15.0 应该可以解决您的问题。