sh 'unset http_proxy' menukar shell yang dilancarkan untuk panggilan itu. Apabila ia keluar, proses Ruby Rake masih mempunyai persekitaran asalnya, dan panggilan sh kemudian mewarisinya semula.

Untuk menukar proses Ruby bagi kerja seterusnya:

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

Itu menjejaskan anak proses kemudian dan kod Ruby yang membaca kunci tersebut. Ia tidak mengkonfigurasi semula terminal yang pada mulanya melancarkan Rake.

Untuk satu arahan anak, berikan persekitarannya secara langsung:

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

Antara muka pelancaran proses Ruby menganggap nilai nil sebagai pembuangan daripada persekitaran anak itu. Rake menyerahkan senarai argumen kepada antara muka itu, membiarkan ENV-nya sendiri tidak berubah.

Buang kunci yang berkaitan dengan klien sebenar. Operasi HTTPS juga mungkin menggunakan https_proxy, dan sesetengah klien merujuk ALL_PROXY atau fail konfigurasi lain. Membuang satu kunci HTTP sahaja bukan arahan laluan terus yang sejagat.

Bentuk berbilang argumen memastikan argumen fail boleh laku berasingan. Tidak perlu membina rentetan shell yang mengandungi arahan buang dan URL.

Artikel berkaitan