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.

Похожие статьи