Rake のシェルでは Ruby のプロキシを解除できない
分離された sh 呼び出しの中でプロキシを解除するのではなく、後続のタスクのために Ruby の ENV を変更するか、子プロセス専用の環境ハッシュを渡します。
sh 'unset http_proxy' その呼び出しのために起動されるシェルを変更します。終了すると、Rake の Ruby プロセスは元の環境をそのまま保持しており、後の sh 呼び出しが再びそれを継承します。
後続の作業のために Ruby プロセスを変更するには:
ENV.delete('http_proxy')
ENV.delete('HTTP_PROXY')
これは後の子プロセスと、それらのキーを読む Ruby コードに影響します。Rake を最初に起動したターミナルを再設定することはありません。
子コマンド 1 つに対しては、その環境を直接指定します:
sh(
{ 'http_proxy' => nil, 'HTTP_PROXY' => nil },
'ruby', 'download.rb'
)
Ruby のプロセス起動インターフェースは nil 値をその子の環境からの削除として扱います。Rake は引数リストをそのインターフェースに渡すため、自身の ENV は変更されません。
実際のクライアントに関係するキーを削除してください。HTTPS 操作は https_proxy も使う場合があり、一部のクライアントは ALL_PROXY や別の設定ファイルを参照します。HTTP キーを 1 つ削除するだけでは、普遍的な直接接続の指示にはなりません。
複数引数の形式では実行可能ファイルの引数が分離されます。解除コマンドと URL を含むシェル文字列を組み立てる必要はありません。