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 ключ не е универсална инструкция за директен маршрут.

Формата с няколко аргумента запазва аргументите на изпълнимия файл отделно. Няма нужда да се строи shell низ с команда за премахване и URL.

Подобни статии