rails - postgres错误:原因:不兼容的库版本:libpq.5.dylib需要1.0.0或更高版本,

时间:2012-06-20 20:15:49

标签: ruby-on-rails ruby macos postgresql osx-snow-leopard

我在Mac(10.6.8)上遇到了Ruby(1.9.3),Rails和Postgres(9.0.8)的设置问题。 每当我运行rails console时,我都会收到以下错误:

/Users/dc/.rvm/gems/ruby-1.9.3-head@global/gems/pg-0.13.2/lib/pg.rb:4:in `require': dlopen(/Users/dc/.rvm/gems/ruby-1.9.3-head@global/gems/pg-0.13.2/lib/pg_ext.bundle, 9): Library not loaded: @loader_path/../lib/libssl.dylib (LoadError)
  Referenced from: /usr/lib/libpq.5.dylib
  Reason: Incompatible library version: libpq.5.dylib requires version 1.0.0 or later, but libssl.0.9.8.dylib provides version 0.9.8 - /Users/dc/.rvm/gems/ruby-1.9.3-head@global/gems/pg-0.13.2/lib/pg_ext.bundle  
    from /Users/dc/.rvm/gems/ruby-1.9.3-head@global/gems/pg-0.13.2/lib/pg.rb:4:in `<top (required)>'
    from /Users/dc/.rvm/gems/ruby-1.9.3-head@global/gems/bundler-1.1.4/lib/bundler/runtime.rb:68:in `require'
    from /Users/dc/.rvm/gems/ruby-1.9.3-head@global/gems/bundler-1.1.4/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
    from /Users/dc/.rvm/gems/ruby-1.9.3-head@global/gems/bundler-1.1.4/lib/bundler/runtime.rb:66:in `each'
    from /Users/dc/.rvm/gems/ruby-1.9.3-head@global/gems/bundler-1.1.4/lib/bundler/runtime.rb:66:in `block in require'
    from /Users/dc/.rvm/gems/ruby-1.9.3-head@global/gems/bundler-1.1.4/lib/bundler/runtime.rb:55:in `each'
    from /Users/dc/.rvm/gems/ruby-1.9.3-head@global/gems/bundler-1.1.4/lib/bundler/runtime.rb:55:in `require'
    from /Users/dc/.rvm/gems/ruby-1.9.3-head@global/gems/bundler-1.1.4/lib/bundler.rb:119:in `require'
    from /Users/dc/Documents/Aptana Studio 3 Workspace/http/config/application.rb:7:in `<top (required)>'
    from /Users/dc/.rvm/gems/ruby-1.9.3-head@global/gems/railties-3.2.6/lib/rails/commands.rb:39:in `require'
    from /Users/dc/.rvm/gems/ruby-1.9.3-head@global/gems/railties-3.2.6/lib/rails/commands.rb:39:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

我真的不知道如何解决这个问题。我已经尝试过安装不同的Postgres版本,但仍然会遇到同样的错误。

5 个答案:

答案 0 :(得分:5)

我也碰到了这个,但是能够按照python pip install psycopg2 install error上的说明修复它。

首先,确保安装了most recent version of OpenSSL

MacBook Pro:~> openssl version -a
OpenSSL 1.0.0c 2 Dec 2010
built on: Mon Jan  3 17:26:21 PST 2011
platform: darwin64-x86_64-cc
options:  bn(64,64) rc4(ptr,char) des(idx,cisc,16,int) idea(int) blowfish(idx) 
compiler: /usr/bin/gcc-4.2 -fPIC -fno-common -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch x86_64 -O3 -DL_ENDIAN -DMD32_REG_T=int -Wall
OPENSSLDIR: "/opt/local/etc/openssl"

...并注意OPENSSLDIR。在我的系统上,它位于/ opt / local /,因为我是通过MacPorts安装的。我只需要在/ usr / lib /中为libssl.dylib和libcrypto.dylib更新符号链接,以便它们指向/ opt / local / lib中的正确版本而不是usr / lib中的旧版本:

MacBook Pro:~> ls -la /usr/lib/libssl.dylib 
lrwxr-xr-x  1 root  wheel  33 Aug 17 12:25 /usr/lib/libssl.dylib -> /opt/local/lib/libssl.1.0.0.dylib
MacBook Pro:~> ls -la /usr/lib/libcrypto.dylib 
lrwxr-xr-x  1 root  wheel  36 Aug 17 12:28 /usr/lib/libcrypto.dylib -> /opt/local/lib/libcrypto.1.0.0.dylib

您可以使用ln命令创建链接:

sudo ln -s /path/to/postgres/install/lib/libcrypto.dylib /usr/lib/libcrypto.dylib
sudo ln -s /path/to/postgres/install/lib/libssl.dylib /usr/lib/libssl.dylib

答案 1 :(得分:5)

如上所述拼凑文件对我不起作用。 pg总是会看libssl-0.9.8.dylib。

这个问题包含正确的答案:gem install pg --with-pg-config works, bundle fails

归结为

bundle config build.pg --with-pg-config=/Library/PostgreSQL/9.1/bin/pg_config

(或您定位的任何一个pg)

然后是gem uninstall pg,然后是bundle install

答案 2 :(得分:1)

在一个项目中,这个解决方案(“gem install&amp; uninstall pg”)很好。

但是在另一个使用相同rails和Postgres版本的项目中,我必须明确使用gemfile中的版本才能使其工作:

  gem 'pg', '0.14.1'

答案 3 :(得分:0)

安装新的PostgreSQL版本(我用过自制软件)

brew install postgres

然后重新安装gem pg:

gem uninstall pg
gem install pg

希望它有所帮助。

答案 4 :(得分:0)

找到适合我的解决方案: https://github.com/PostgresApp/PostgresApp/issues/109