无法打开库“vips.42”;无法打开库“libvips.42.dylib”

use*_*745 35 ruby-on-rails ruby-on-rails-7

从 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)
Run Code Online (Sandbox Code Playgroud)

GitHub 上有很多类似的问题:(例如这里)。

我不确定是否需要安装 ruby​​-vips gem 或者我的操作系统/共享库是否有问题。

请注意,其他一些人也报告了相同的错误。我想知道这是否可能是一个错误?

use*_*745 73

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

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

如果这就是您想要的,只需确保 vips 已在本地安装即可。您可以使用自制程序安装它(感谢@timroman提供此信息):

brew install vips
Run Code Online (Sandbox Code Playgroud)

但是,如果您不想使用 vips,并且更喜欢像 Rails 6 中那样使用 mini_magick,只需将此行包含在 config/application.rb 中

config.active_storage.variant_processor = :mini_magick
Run Code Online (Sandbox Code Playgroud)

笔记

  • 从使用 :mini_magick 迁移到 :vips 可能需要更改代码才能使您的应用程序按预期工作。有关这方面的信息,请参阅此处。
  • 进一步阅读:

如果您在 heroku 上使用 vip 时遇到问题..

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

  1. 添加gem "ruby-vips"到您的 gemfile(如果尚不存在)

  2. 设置这两个构建包(除了您已有的构建包之外,在本例中我还使用了 heroku/ruby 构建包,因此将其作为最后一个构建包包含在内):

config.active_storage.variant_processor = :mini_magick
Run Code Online (Sandbox Code Playgroud)

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

heroku-community/apt
https://github.com/brandoncc/heroku-buildpack-vips
heroku/ruby
Run Code Online (Sandbox Code Playgroud)
  1. 在应用程序的根目录中创建一个文件,Aptfile内容如下:
heroku buildpacks:set --index=1 heroku-community/apt
heroku buildpacks:set --index=2 https://github.com/brandoncc/heroku-buildpack-vips
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 您可能希望根据具体需要的处理(例如 pdf 处理)向 Aptfile 添加更多库。下面是包含更多库的 Aptfile 示例。这Rails 指南,显示您可能还需要哪些其他东西。
  • 进一步阅读:
    • 线程中有关 vips buildpack 的信息。
    • 请参阅此处的 vips 构建包
    • 有关 apt buildpack 和 Aptfile 的信息,请参阅此处

如果您在 GitHub Actions 上遇到问题

就像其他环境(见上文)一样,您必须安装 libvips。在 ubuntu 上使用apt-get执行此操作,方法是将其添加到工作流程文件中的“步骤”下:

      - name: Install libvips
        run: sudo apt-get install -y libvips
Run Code Online (Sandbox Code Playgroud)

  • 这是一个非常可靠的答案!感谢您花时间将其放在一起 (4认同)

小智 29

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

  • 帮我解决了,谢谢 我得到的错误与问题中提到的错误不同(我认为是因为 Linux,而不是 Mac):`vips.so.42` 和 `libvips.so.42` (2认同)