Postgres.app升级,现在Rails应用程序无法启动

mem*_*oht 3 heroku ruby-on-rails-3.2 postgresql-9.2 postgres.app

我刚刚将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会导致这种情况?

ste*_*wne 6

我找到了一个适合我的解决方案,并且需要最少的黑客/配置.您只需要执行一次,它将适用于每个bundle安装.将以下内容添加到.bash_profile,.bash_rc或等效内容中:

export DYLD_FALLBACK_LIBRARY_PATH=/Applications/Postgres.app/Contents/MacOS/lib:$DYLD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

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

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

也可以看看:

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

alias psql="(. ~/.bash_profile; unset DYLD_FALLBACK_LIBRARY_PATH; psql)";
Run Code Online (Sandbox Code Playgroud)

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

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