Оболочка Rake не может снять прокси Ruby
Измените ENV Ruby для последующих задач или передайте дочернему процессу отдельный хеш окружения вместо снятия прокси внутри изолированного вызова sh.
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.