2012-03-15 1 views
1

RubyをインストールしたRuby(Rubyをインストールするのに最も一般的なツール)は、HTTPS経由での接続など、SSL操作ができないバイナリを生成します。 known workaroundの既知の問題です。実行時にルビーバイナリのコンパイルレイアウトを検出する

このようなRubyバイナリでSSLを使用しようとすると、例外はLoadError: cannot load such file -- opensslとなります。

質問:私はRubyのバイナリがに対して構築されたLIBS言うので、それが実行時にSSLまたはないが可能であるかどうかを検出することができますどのような方法がありますか?実際にSSLを使用して例外をキャッチしようとしている以外は?

答えて

4

あなたが必要としているのと同じ作業をしたいのでなければ、最も簡単なのはopensslを要求し、システムにその可用性を検出するために存在しない場合に備えてLoadErrorを救済しようとすることです。

イディオムcommonlyが使用されているようです。

それがロードされた場合は、事後検出何かを望んでいたかいない

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

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

助けはあなたでしょうか?

つまり、戻り値defined?(OpenSSL)が非nilかどうかを確認しますか?

OpenSSLのすべてのバージョンで利用できない機能が使用されている実行時のテストを除外し、OpenSSLが拡張機能として存在しない場合は、テストを完全に除外する(if defined? OpenSSL)テストでは、これを通常testsで除外します。

+0

それは私のルビーコードとは別のプロセスを開始させるでしょうが、例外に頼るよりもまだ有効でしょう。 –

+0

混乱のために申し訳ありません、もちろん、定義済みですか?あなたのコードに直接OpenSSLを挿入する必要はありません。別のプロセスに展開する必要はありません。あなたの端末に便利に入力できるので、これを例として使用しました。リンクされたテストを見ると、インラインのように見えます。 – emboss

+0

私はまだかなり理解していません。だから私は2つのルビーバイナリを持っている - SSLのサポートの有無。私は単一行のプログラム 'p definedを作成していますか? OpenSSL'とルビーの両方で同じ結果が得られますが、これは 'openssl'が必要になるまで定義されていません。SSLをサポートしていないものが必要な場合は例外が発生します。 –

関連する問題