无法打开库'vips.42'; 无法打开库'libvips.42.dylib'。

30

在从Rails 6升级到Rails 7时,当我本地运行一些ActiveStorage方法时,我看到:

Could not open library 'vips.42': dlopen(vips.42, 0x0005): tried: 'vips.42' (no such file), '/usr/local/lib/vips.42' (no such file), '/usr/lib/vips.42' (no such file), '/Users/st/rails/myapp/vips.42' (no such file), '/usr/local/lib/vips.42' (no such file), '/usr/lib/vips.42' (no such file). (LoadError)
Could not open library 'libvips.42.dylib': dlopen(libvips.42.dylib, 0x0005): tried: 'libvips.42.dylib' (no such file), '/usr/local/lib/libvips.42.dylib' (no such file), '/usr/lib/libvips.42.dylib' (no such file), '/Users/st/rails/myapp/libvips.42.dylib' (no such file), '/usr/local/lib/libvips.42.dylib' (no such file), '/usr/lib/libvips.42.dylib' (no such file)

有一些类似的 GitHub 问题:(例如 这里)。

我不确定是否需要安装 ruby-vips gem,还是我的操作系统/共享库存在问题。

请注意,一些其他人报告了相同的错误 (参见此处)。我想知道是否这可能是一个 bug?

2个回答

66

如果您在本地机器上遇到此问题..

如果您刚刚从Rails 6升级到7,并在config/application.rb中设置了config.load_defaults 7.0,那么您的应用程序将默认使用vips。

如果这是您想要的,请确保在本地安装了vips。 您可以使用homebrew进行安装(感谢@timroman提供的信息):

brew install vips

然而,如果您不想使用vips,并且更喜欢在rails 6中使用mini_magick,只需在config/application.rb中包含这一行即可。

config.active_storage.variant_processor = :mini_magick

注意事项


如果在Heroku上遇到vips问题..

如果在Heroku上遇到类似问题,请先确保本地一切正常(如果不正常,请参见上文),然后尝试以下3个步骤解决Heroku上的问题:

  1. 如果gemfile中没有,请添加 gem "ruby-vips"

  2. 设置这两个buildpacks(除了任何已经有的之外,在本示例中我还使用了heroku/ruby buildpack,因此将其包含为最后的buildpack):

heroku-community/apt
https://github.com/brandoncc/heroku-buildpack-vips
heroku/ruby

我认为这里的顺序很重要(如果您有其他的构建包,最好在前两个之后添加它们)。您可以像这样设置构建包:

heroku buildpacks:set --index=1 heroku-community/apt
heroku buildpacks:set --index=2 https://github.com/brandoncc/heroku-buildpack-vips
  1. 在您的应用程序根目录中创建一个名为Aptfile的文件,并将以下内容添加到其中:
libglib2.0-0
libglib2.0-dev
libpoppler-glib8

注意:

  • 根据需求,您可能需要添加更多的库到Aptfile中(例如pdf处理)。这里是一个包含更多库的Aptfile文件的示例。 这里是Rails指南显示的其他所需内容。
  • 进一步阅读:
    • 线程中有关于vips buildpack的信息。
    • 查看此处获取vips buildpack。
    • 此处了解有关apt buildpack和Aptfile的信息。

如果您在GitHub Actions上遇到问题

与其他环境一样(请参见上文),您必须安装libvips。 在ubuntu上使用apt-get进行安装,在工作流文件中的“步骤”下添加以下内容:

      - name: Install libvips
        run: sudo apt-get install -y libvips

2
我正在尽可能保持一切简单化,似乎vips是备选工具。我没有指定任何地方使用它,不确定为什么它在寻找它。好的,我会这样做! - timroman
1
有些地方我不够聪明,无法找到想要使用vips的东西。按照流程,指定变量处理器。结果发现我本地没有安装它,“brew install vips”解决了我的问题。 - timroman
4
这是一个非常扎实和优秀的答案!感谢您抽出时间来整理它。 - Tom Pinchen

24
对于Linux用户,只需使用apt install libvips进行安装,如果想继续使用Rails 7的默认加载方式。

2
问题已经解决,谢谢。我遇到的错误与问题中提到的不同(我认为这是因为使用Linux而不是Mac):vips.so.42libvips.so.42 - marcelocra
在Ubuntu上,我使用了“sudo apt-get install libvips”。 - danielricecodes
它也很适用于Docker镜像。 - Rafael Gomes Francisco

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