3

我刚刚将我的 Postgres.app 升级到最新版本 (9.2.4.1) 现在无法使用 Foreman 或 Rails 服务器启动我的 Rails 应用程序。

/Users/memoht/Sites/myapp/.gem/ruby/1.9.3/gems/pg-0.15.1/lib/pg.rb:4:in `require': dlopen(/Users/memoht/Sites/myapp/.gem/ruby/1.9.3/gems/pg-0.15.1/lib/pg_ext.bundle, 9): Library not loaded: @executable_path/../lib/libssl.1.0.0.dylib (LoadError)

Referenced from: /Applications/Postgres.app/Contents/MacOS/lib/libpq.dylib

Reason: image not found - /Users/memoht/Sites/myapp/.gem/ruby/1.9.3/gems/pg-0.15.1/lib/pg_ext.bundle


  • 浏览Postgres.app 文档

  • 从 9.2.2.0 升级到 9.2.4.1 不是新的次要版本,因此不应涉及 pg_upgrade

  • .bashrc 的 PATH 设置正确PATH="/Applications/Postgres.app/Contents/MacOS/bin:$PATH"

  • 卸载并重新安装 PG gem。

  • 错误地认为我需要通过自制软件安装 PostGIS,但它通过 Brew 自动安装了 Postgres 以及许多其他依赖项。

如果我将 Postgres.app 版本换回 9.2.2.0,一切都会再次运行。既然 Postgres.app 是拖放安装,为什么从 9.2.2.0 升级到 9.2.4.1 会导致这种情况?

4

2 回答 2

6

我找到了一个适合我的解决方案,并且需要最少的黑客/配置。您只需要这样做一次,它将适用于每个捆绑包安装。将以下内容添加到您的 .bash_profile、.bash_rc 或等效文件中:

export DYLD_FALLBACK_LIBRARY_PATH=/Applications/Postgres.app/Contents/MacOS/lib:$DYLD_LIBRARY_PATH

(假设您在默认位置安装了 Postgres.app)。然后重新启动您的终端会话并重试。

直接导出到 DYLD_LIBRARY_PATH 可能会导致其他依赖它的应用程序出现严重问题,但使用回退路径可以避免这些问题。

也可以看看:

编辑:当您尝试运行 psql 时,设置 DYLD_FALLBACK_LIBRARY_PATH 似乎会导致错误。要解决此问题,您可以在 .bash_profile 中添加以下两行:

alias psql="(. ~/.bash_profile; unset DYLD_FALLBACK_LIBRARY_PATH; psql)";

这是假设您正在使用 bash 并且您的 .bash_profile 位于您的主目录中。如果不是这种情况(或者如果您使用 .bashrc 或其他环境设置而不是 .bash_profile)~/.bash_profile,请将命令的一部分更改为环境设置脚本的路径。

别名命令基本上会启动一个子shell,它不会影响您当前的 bash 环境。因此,当它取消设置 DYLD_FALLBACK_LIBRARY_PATH 变量时,它只是暂时的。退出 psql 后,将再次设置环境变量,以便 rails 正常运行。

于 2013-05-24T17:33:16.533 回答
0

您的应用程序中的 pg gem 很可能是针对旧库构建的。尝试针对新的 Postgres.app 重建它:

$ gem uninstall pg
[...]
$ bundle install
[...]
"installing pg" (or something..)
于 2013-05-20T15:23:35.107 回答