我在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版本,但仍然会遇到同样的错误。
答案 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)