sh 'unset http_proxy' پوسته‌ای را که برای آن فراخوانی اجرا می‌شود تغییر می‌دهد. وقتی خارج شود، فرایند Ruby در Rake همچنان محیط اصلی خود را دارد و فراخوانی sh بعدی دوباره آن را به ارث می‌برد.

برای تغییر فرایند Ruby برای کارهای بعدی:

ENV.delete('http_proxy')
ENV.delete('HTTP_PROXY')

این روی فرزندان بعدی و کد Ruby که آن کلیدها را می‌خواند اثر می‌گذارد. این کار ترمینالی که Rake را در ابتدا اجرا کرده دوباره پیکربندی نمی‌کند.

برای یک فرمان فرزند، محیط آن را مستقیماً بدهید:

sh(
  { 'http_proxy' => nil, 'HTTP_PROXY' => nil },
  'ruby', 'download.rb'
)

رابط اجرای فرایند Ruby مقادیر nil را به‌عنوان حذف از محیط آن فرزند در نظر می‌گیرد. Rake فهرست آرگومان‌ها را به آن رابط می‌دهد و ENV خودش را بدون تغییر می‌گذارد.

کلیدهای مرتبط با کلاینت واقعی را حذف کنید. یک عملیات HTTPS ممکن است https_proxy را هم مصرف کند و بعضی کلاینت‌ها ALL_PROXY یا فایل پیکربندی دیگری را می‌خوانند. حذف تنها یک کلید HTTP دستورالعمل همگانی مسیر مستقیم نیست.

شکل چندآرگومانی آرگومان‌های فایل اجرایی را جدا نگه می‌دارد. نیازی به ساختن رشته پوسته‌ای شامل فرمان حذف و یک URL نیست.

مقالات مرتبط