【发布时间】:2012-02-29 06:11:37
【问题描述】:
我有运行 Ruby 1.9.2、Rails 3 和 postgreSQL 8.3 的应用程序。它最初是在 postgreSQL 9.1 上设置和工作的,但我卸载了 9.1 并安装并更改为 8.3,以确保 Heroku 共享数据库设置的兼容性。运行正常,但现在不行
现在,在使用此应用程序时,当我运行数据库升级时,我收到此错误:
dlopen(/Users/michaeljmccoy/.rvm/gems/ruby-1.9.2-p290/gems/pg-0.12.2/lib/pg_ext.bundle, 9): Library not loaded: libpq.5.dylib
Referenced from: /Users/michaeljmccoy/.rvm/gems/ruby-1.9.2-p290/gems/pg-0.12.2/lib/pg_ext.bundle
Reason: no suitable image found. Did find:
/usr/lib/libpq.5.dylib: no matching architecture in universal wrapper - /Users/michaeljmccoy/.rvm/gems/ruby-1.9.2-p290/gems/pg-0.12.2/lib/pg_ext.bundle
当我尝试运行服务器时,我收到以下错误消息:
/Users/michaeljmccoy/.rvm/gems/ruby-1.9.2-p290/gems/pg-0.12.2/lib/pg.rb:4:in `require': dlopen(/Users/michaeljmccoy/.rvm/gems/ruby-1.9.2-p290/gems/pg-0.12.2/lib/pg_ext.bundle, 9): Library not loaded: libpq.5.dylib (LoadError)
Referenced from: /Users/michaeljmccoy/.rvm/gems/ruby-1.9.2-p290/gems/pg-0.12.2/lib/pg_ext.bundle
Reason: no suitable image found. Did find:
/usr/lib/libpq.5.dylib: no matching architecture in universal wrapper - /Users/michaeljmccoy/.rvm/gems/ruby-1.9.2-p290/gems/pg-0.12.2/lib/pg_ext.bundle
from /Users/michaeljmccoy/.rvm/gems/ruby-1.9.2-p290/gems/pg-0.12.2/lib/pg.rb:4:in `<top (required)>'
from /Users/michaeljmccoy/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require'
from /Users/michaeljmccoy/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
from /Users/michaeljmccoy/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `each'
from /Users/michaeljmccoy/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `block in require'
from /Users/michaeljmccoy/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `each'
from /Users/michaeljmccoy/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `require'
from /Users/michaeljmccoy/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler.rb:122:in `require'
from /Users/michaeljmccoy/www/mikemccoy/config/application.rb:7:in `<top (required)>'
from /Users/michaeljmccoy/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.2.0.rc2/lib/rails/commands.rb:53:in `require'
from /Users/michaeljmccoy/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.2.0.rc2/lib/rails/commands.rb:53:in `block in <top (required)>'
from /Users/michaeljmccoy/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.2.0.rc2/lib/rails/commands.rb:50:in `tap'
from /Users/michaeljmccoy/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.2.0.rc2/lib/rails/commands.rb:50:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
我知道它们是非常相似的错误,可能与缺少路径有关。但是,当我将路径添加到我的 .profile 文件并重新启动终端窗口时,我得到了同样的错误。
【问题讨论】:
-
您的
PATH控制shell 在哪里查找可执行文件。您的LD_LIBRARY_PATH控制外壳查找库的位置。也就是说,在我看来,您的 pg gem 是针对与您现在拥有的不同的 PostgreSQL 库版本编译的。您可能只需要重新安装 pg。 -
我删除了当前的 pg gem 并尝试重新安装,但是我得到了一个关于缺少 postgres 库的似乎很常见的错误。这是我所看到的:'正在检查 pg_config... 是使用 /Library/PostgreSQL/8.3/bin/pg_config 中的配置值检查 libpq-fe.h... 是检查 libpq/libpq-fs.h。 .. 是检查 pg_config_manual.h... 是检查 -lpq 中的 PQconnectdb()... 不检查 -llibpq 中的 PQconnectdb()... 不检查 -lms/libpq 中的 PQconnectdb()... 否找不到 PostgreSQL 客户端库 (libpq) *** extconf.rb 失败 ***
-
我记得在过去的某个时候不得不解决这个问题,这相当于必须手动向 gem builder 提供标志来告诉它在哪里寻找头文件和库,但我没有立即获取信息。
-
嗯。好的,我会考虑这样做的。如果您确实碰巧遇到了您所做的事情并且愿意分享,那就太好了。再次感谢您为我指明正确的方向。非常感谢。
-
致任何发现此问题的人,因为您在 Mac OS X Mavericks 上遇到此 dylib 问题并且您正在使用 PostgresApp:请在此处查看我对相关问题的回答:stackoverflow.com/a/19547385/1493505。基本上我需要回到 Postgres 应用程序的 9.2.2.0 版本才能使其正常工作。感谢 @jhiro009 为我指明了正确的方向 - 9.2.4.3 版在小牛队根本不适合我。
标签: ruby-on-rails postgresql libpq