Rails、pow和动态链接库未加载:/usr/local/lib/libsqlite3.0.8.6.dylib

8

我已经有几周没有在这个Rails应用程序上工作了。昨天我回来了,首先打开.dev URL(我正在使用pow),它给出了以下错误消息:

LoadError: dlopen([...]/vendor/bundle/gems/sqlite3-1.3.7/lib/sqlite3/sqlite3_native.bundle, 9): Library not loaded: /usr/local/lib/libsqlite3.0.8.6.dylib Referenced from: [...]/vendor/bundle/gems/sqlite3-1.3.7/lib/sqlite3/sqlite3_native.bundle Reason: image not found - [...]/vendor/bundle/gems/sqlite3-1.3.7/lib/sqlite3/sqlite3_native.bundle

我检查了rbenv安装,一切都看起来很好。我试图想到最近的更改可能会导致这种情况,但我不知道。我相当确定我错过了什么,但我的调试尝试徒劳无功。我不知道是否相关,但我最近切换到了zsh。

1个回答

24

解决方案

卸载并重新安装sqlite:

~/d/w/r/my-app git:master ❯❯❯ gem uninstall sqlite3                                                                      

Successfully uninstalled sqlite3-1.3.7

~/d/w/r/my-app git:master ❯❯❯ gem install sqlite3                                                                            
Fetching: sqlite3-1.3.7.gem (100%)
Building native extensions.  This could take a while...
Successfully installed sqlite3-1.3.7
1 gem installed

发生了什么

当安装sqlite3 gem时,它会构建一个用于与sqlite通信的本地组件,因此它链接到本地的sqlite3库。这一切都是由gem在幕后处理的。当这种情况发生时,它指定了所链接的库的位置。

最近(一月份),sqlite的homebrew公式变成了keg-only。以前链接到sqlite的任何内容都引用了homebrew版本。您可以使用otool -L来检查这一点:

~/d/w/r/my-app git:master ❯❯❯ otool -L /path/to/earlier/gem/sqlite3-1.3.6/lib/sqlite3/sqlite3_native.bundle
/path/to/earlier/gem/sqlite3-1.3.6/lib/sqlite3/sqlite3_native.bundle:
    /usr/local/lib/libsqlite3.0.8.6.dylib (compatibility version 9.0.0, current version 9.6.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)

运行otool命令,你可以看到新版本现在已经链接到了由苹果提供的系统sqlite库:

~/d/w/r/a/new-config git:master ❯❯❯ otool -L /path/to/new/gem/sqlite3-1.3.7/lib/sqlite3/sqlite3_native.bundle
 /path/to/new/gem/sqlite3-1.3.7/lib/sqlite3/sqlite3_native.bundle:
    /usr/lib/libsqlite3.dylib (compatibility version 9.0.0, current version 9.6.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接