2012-03-15 3 views
1

Довольно часто Ruby, установленный с помощью RVM («самый популярный инструмент для установки Ruby»), создает двоичный файл, не способный выполнять операции SSL (например, подключение через HTTPS). Это известная проблема с known workaround.Обнаружение макета компоновки рубиновых двоичных файлов во время выполнения

Если вы пытаетесь использовать SSL с таким двоичным кодом Ruby, это приводит к исключению LoadError: cannot load such file -- openssl.

Вопрос: есть ли способ, что я могу сказать, какой ЛИЭС рубин двоичный был построен против и таким образом обнаружить, если он способен SSL или не во время выполнения? Помимо попытки фактически использовать SSL и выхватить исключение?

ответ

4

Если вы хотите выполнить ту же работу, которая требуется, я думаю, что проще всего попытаться потребовать openssl и спасти LoadError в случае, если он отсутствует в системе для обнаружения ее доступности.

Кажется, что идиома commonly используется.

Если вы хотите что-то, что обнаруживает потом, если он был загружен или не будет

ruby -ropenssl -e 'p defined? OpenSSL' # => "constant" 

против

ruby -e 'p defined? OpenSSL' # => nil 

вам помочь?

То есть, проверяя, является ли возвращаемое значение defined?(OpenSSL) не-ноль?

Мы обычно используем это в tests исключить тесты во время выполнения, когда функции, которые не доступны для всех версий OpenSSL используется, и исключить тесты полностью (if defined? OpenSSL), если OpenSSL нет как расширение.

+0

, который заставит меня начать отдельный процесс с моего рубинового кода, но он, вероятно, лучше, чем полагаться на исключение, примет, если нет другого ответа –

+0

Извините за путаницу, нет, вы можете, конечно, использовать 'определенные? OpenSSL' прямо в вашем коде, не нужно разветвлять его в отдельный процесс - я просто использовал это в качестве примера, потому что вы можете удобно ввести его в свой терминал. Если вы посмотрите на связанный тест, вот как он будет выглядеть как встроенный. – emboss

+0

Я все еще не совсем понимаю. Итак, у меня есть два рубиновых двоичных файла - с поддержкой SSL и без нее. Я создаю однострочную программу 'p defined? OpenSSL' и оба ruby ​​производят один и тот же результат b/c, который не определен до тех пор, пока вы не потребуете «openssl» ... и когда я требую, что без поддержки SSL дает исключение –

Смежные вопросы