sh 'unset http_proxy' ändrar det skal som startas för det anropet. När det avslutas har Rakes Ruby-process fortfarande sin ursprungliga miljö, och ett senare sh-anrop ärver den igen.

För att ändra Ruby-processen för fortsatt arbete:

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

Det påverkar senare barn och Ruby-kod som läser dessa nycklar. Det konfigurerar inte om terminalen som ursprungligen startade Rake.

För ett enskilt barnkommando anger du dess miljö direkt:

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

Rubys gränssnitt för processstart behandlar nil-värden som borttagningar från det barnets miljö. Rake skickar argumentlistan till det gränssnittet och lämnar sin egen ENV oförändrad.

Ta bort nycklarna som är relevanta för den faktiska klienten. En HTTPS-åtgärd kan också använda https_proxy, och vissa klienter läser ALL_PROXY eller en annan konfigurationsfil. Att ta bort bara en HTTP-nyckel är inte en universell instruktion för direkt väg.

Formen med flera argument håller körbara argument åtskilda. Det finns inget behov av att bygga en skalsträng som innehåller ett borttagningskommando och en URL.

Relaterade artiklar