У меня есть скрипт ruby, который я пытаюсь запустить на AWS Lambda.Как заставить это использовать гем Ruby с собственными расширениями?
Я установил свои камни Ruby через bundle install --deployment
и включил их в свое развертывание.Когда я запускаю функцию в lambda, я получаю сообщение об ошибке:
Игнорирование oj-2.18.5, потому что его расширения не созданы.Попробуйте: gem pristine oj --version 2.18.5
Ошибка инициализации при загрузке обработчика
{
"errorMessage": "libruby.so.2.5: невозможно открыть общий объектfile: такого файла или каталога нет - /opt/ruby/gems/2.5.0/gems/oj-2.18.5/lib/oj/oj.so",
...
Я попытался включить зависимости как в сам лямбда-код, так и в качестве лямбда-слоя.Единственное, что меняется, - это путь в сообщении об ошибке.
Лямбда может найти мои рубиновые камни.Я получаю другую ошибку, когда они находятся в неправильном месте.
/opt/ruby/gems/2.5.0/gems/oj-2.18.5/lib/oj/oj.so
существует.
Я пробовал это с файлами, сгенерированными bundle install
как в Ubuntu, так и в AWS-linux.В обеих системах bundle информирует меня, что это «Установка oj 2.18.5 с собственными расширениями».
Если я загружаю копию libruby.so
в свою лямбду и устанавливаю переменную среды LD_LIBRARY_PATH
на еерасположение и использование набора зависимостей, установленных на AWS-linux, исправляет ошибку, перечисленную выше, но только для того, чтобы сделать ошибку еще более непрозрачной:
/ lib64 / libc.so.6: версия `GLIBC_2.25 'не найден (требуется /opt/ruby/lib/libruby.so.2.5)