sh 'unset http_proxy' modifica la shell avviata per quella chiamata. Quando termina, il processo Ruby di Rake ha ancora il suo ambiente originale, e una chiamata sh successiva lo eredita di nuovo.

Per modificare il processo Ruby per il lavoro successivo:

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

Ciò influisce sui figli successivi e sul codice Ruby che legge queste chiavi. Non riconfigura il terminale che ha avviato Rake originariamente.

Per un singolo comando figlio, fornite il suo ambiente direttamente:

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

L'interfaccia di avvio dei processi di Ruby tratta i valori nil come rimozioni dall'ambiente di quel figlio. Rake passa l'elenco degli argomenti a quell'interfaccia, lasciando invariato il proprio ENV.

Rimuovete le chiavi rilevanti per il client effettivo. Un'operazione HTTPS può usare anche https_proxy, e alcuni client consultano ALL_PROXY o un altro file di configurazione. Rimuovere una sola chiave HTTP non è un'istruzione universale di rotta diretta.

La forma con più argomenti mantiene separati gli argomenti dell'eseguibile. Non serve costruire una stringa di shell contenente un comando di rimozione e un URL.

Articoli correlati