При переносе из Heroku Bamboo в стек Cedar отсутствуют некоторые нативные библиотеки!Как это исправить? - PullRequest
4 голосов
/ 09 сентября 2011

Я перемещаю производственное приложение из бамбукового стека в кедр, я успешно перенес приложение на кедр, но выдает ошибку, такую ​​как

LoadError: Could not open library 'lib.so': lib.so: cannot open shared object file: No such file or directory
from /app/vendor/bundle/ruby/1.9.1/gems/ffi-1.0.9/lib/ffi/library.rb:75:in `block in ffi_lib'
from /app/vendor/bundle/ruby/1.9.1/gems/ffi-1.0.9/lib/ffi/library.rb:54:in `map'
from /app/vendor/bundle/ruby/1.9.1/gems/ffi-1.0.9/lib/ffi/library.rb:54:in `ffi_lib'

0.1.3 / lib / tidy_ffi / interface.rb: 5: in `'

Похоже, что в стеке кедров, которые существовали в стеке бамбука, отсутствуют некоторые родные лимбы. В моем случае это libtidy.so.

Как я могу это исправить?

1 Ответ

5 голосов
/ 09 сентября 2011

Стек бамбука и стек кедра весьма различны с точки зрения того, что включено в него.Но лежащее в основе ядро ​​и архитектура linux одинаковы, поэтому копирование файлов должно быть безопасным

(local)$ heroku run bash --app bamboo-app-name
(remote)$ uname -a
  Linux  2.6.32-316-ec2 #31-Ubuntu SMP Wed May 18 14:10:36 UTC 2011 x86_64 GNU/Linux

(local)$ heroku run bash --app cedar-app-name
(remote)$ uname -a
  Linux  2.6.32-316-ec2 #31-Ubuntu SMP Wed May 18 14:10:36 UTC 2011 x86_64 GNU/Linux

Допустим, ваше приложение использует гем tidy_ffi, для которого требуется общий объектный файл libtidy.soприсутствовать в / usr / lib.

В кедре любой вызов, такой как TidyFFI :: Tidy.new (" Hello "), завершится с ошибкой

LoadError: Could not open library 'lib.so': lib.so: cannot open shared object file: No such file or directory

Чтобы исправить это, вы можете получить копиюlibtidy.so из бамбука (вы можете использовать scp для любого удаленного блока для этого) и зафиксировать его в своем репо (может быть в RAILS_ROOT / lib / native) и добавить следующую строку в environment.rb

ENV['LD_LIBRARY_PATH'] ||="/usr/lib"
ENV['LD_LIBRARY_PATH'] +=":/app/lib/native"

Это сделает гем tidy_ffi заглядывающим в lib / native для разделяемых библиотек.Перенесите эти изменения в приложение Cedar, и все должно работать нормально.

...