2016-04-27 4 views
1

Я пытаюсь настроить сервер для обслуживания приложения Ruby, которое использует ImageMagick и жемчужину RMagick. На сервере работает OS X 10.10. У меня есть еще один сервер, на котором работают те же самые версии (OS, ImageMagick, xz и RMagick gem), которые работают как ожидалось.ImageMagick не удалось запустить из-за несовместимой версии liblzma

Однако, каждый раз, когда я пытаюсь служить приложение с нового сервера, я получаю ошибку о том, что «веб-приложение не может быть запущено», со следующим следом:

dlopen(/Users/user/.rvm/gems/[email protected]/extensions/x86_64-darwin-14/2.1.0-static/rmagick-2.15.4/RMagick2.bundle, 9): 
    Library not loaded: /usr/local/lib/liblzma.5.dylib 
Referenced from: /usr/local/opt/imagemagick/lib/libMagickCore-6.Q16.2.dylib 
Reason: Incompatible library version: libMagickCore-6.Q16.2.dylib requires version 8.0.0 or later, but liblzma.5.dylib provides version 6.0.0 - /Users/user/.rvm/gems/[email protected]/extensions/x86_64-darwin-14/2.1.0-static/rmagick-2.15.4/RMagick2.bundle (LoadError) 

В основном, это выглядит как ImageMagick ищет версию 8.0.0 liblzma, но только нахождение версии 6.0.0.

ImageMagick и xz установлены с использованием Homebrew - в соответствии с другими ответами на вопросы, пакет xz должен иметь liblzma 8.0.0.

Я попытался удалить и переустановить ImageMagick, драгоценный камень rmagick и xz (пакет, из которого подается liblzma) безрезультатно.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.


EDIT: Выход работает otool на /usr/local/lib/liblzma.5.dylib:

otool -L /usr/local/lib/liblzma.5.dylib 
/usr/local/lib/liblzma.5.dylib: 
    /usr/local/opt/xz/lib/liblzma.5.dylib (compatibility version 8.0.0, current version 8.2.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0) 

Я еще больше запутался .. это явно по сравнению с версией 8.0.0.

+0

делает imagemagick правильно работать за пределами рубина? – ThomasSevestre

+0

Я только что протестировал, и сам ImageMagick работает. Я преобразовал изображение в меньший размер с помощью командной строки, и он работает отлично. – tecz

+0

Если вам действительно не нужна rmagick, вы можете попробовать mini_magick. Он использует командную строку, поэтому он должен работать – ThomasSevestre

ответ

1

Хорошо, я понял это.

По какой-то причине, ImageMagick, RMagick и/или пассажир нахождения системы копию liblzma.5.dylib, расположенной в /USR/Lib, а не копии доморощенного установки на /USR/местные/Библиотека (несмотря на сообщение об ошибке, указывающее, что он просматривает/usr/local/lib).

Я понял это, запустив команду otool на обеих копиях liblzma.5.dylib.

Для /usr/local/lib/liblzma.5.dylib:

otool -L /usr/local/lib/liblzma.5.dylib 
/usr/local/lib/liblzma.5.dylib: 
    /usr/local/opt/xz/lib/liblzma.5.dylib (compatibility version 8.0.0, current version 8.2.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0) 

Для /usr/lib/liblzma.5.dylib:

otool -L /usr/lib/liblzma.5.dylib 
/usr/lib/liblzma.5.dylib: 
    /usr/lib/liblzma.5.dylib (compatibility version 6.0.0, current version 6.3.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0) 

После перезапуска системы, ImageMagick/RMagick/пассажир начал использовать правильную копию liblzma.5.dylib.