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.

Схожі статті