2012-02-07 111 views
18

我有运行Ruby 1.9.2,Rails 3和postgreSQL 8.3的应用程序。它最初是安装和使用postgreSQL 9.1的,但我卸载了9.1并安装并更改为8.3,以确保Heroku共享数据库设置的兼容性。它运行正常,但这个程序工作时,当我运行一个数据库升级我得到这个错误是不是现在Ruby on Rails/PostgreSQL - 启动server-libq.5.dylib时出现库未加载错误

现在:

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/[email protected]/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require' 
    from /Users/michaeljmccoy/.rvm/gems/[email protected]/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `block (2 levels) in require' 
    from /Users/michaeljmccoy/.rvm/gems/[email protected]/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `each' 
    from /Users/michaeljmccoy/.rvm/gems/[email protected]/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `block in require' 
    from /Users/michaeljmccoy/.rvm/gems/[email protected]/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `each' 
    from /Users/michaeljmccoy/.rvm/gems/[email protected]/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `require' 
    from /Users/michaeljmccoy/.rvm/gems/[email protected]/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文件并重新启动终端窗口时,出现相同的错误。

+0

您的'PATH'控制shell查找可执行文件的位置。你的'LD_LIBRARY_PATH'控制shell寻找库的位置。也就是说,这在我看来像你的pg gem是针对不同于你现在使用的PostgreSQL库版本编译的。你可能只需要重新安装页面。 – 2012-02-07 19:52:31

+0

我删除了当前的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()...否 检查PQconnectdb() in -lms/libpq ... no 找不到PostgreSQL客户端库(libpq) *** extconf.rb失败*** – 2012-02-10 20:28:09

+1

我记得在过去的某个时间点需要解决这个问题,它相当于必须手动向宝石生成器提供标志,告诉它在哪里寻找标题和库,bu我现在没有手头的信息。 – 2012-02-10 22:20:10

回答

35

您可能需要删除并重新安装pg宝石,因此它是根据Postgres的正确版本编译的。

+0

刚刚遇到这个问题,这工作完美! – 2013-09-26 22:36:23

+1

如果这没有帮助你,你可能想看到这个问题:http://stackoverflow.com/questions/15512137/ruby-on-rails-postgresql-library-not-loaded-error-when-starting-server – 2013-11-09 02:24:05

+0

该解决方案也适用于Django,只需在virtualenv中重新安装psycopg2即可。 – Pietro 2016-02-24 19:09:16

4

对于任何人看到此错误和运行PostgresApp,这是一个已知的问题,这是固定在9.2.4.3版本:

讨论:https://github.com/PostgresApp/PostgresApp/issues/109

安装:https://github.com/PostgresApp/PostgresApp/releases/tag/9.2.4.3

当然,你可以只需抓住最新版本(http://postgresapp.com/)。这两个版本让我备份并运行Rails 3.2.14和Ruby 2.0.0。但是,请注意,当我安装9.2.4.3时,我的数据库仍然在psql中列出,但是当我安装了9.3.0(当前的版本)时,我的数据库不再列出。