sh 'unset http_proxy' mengubah shell yang dijalankan untuk panggilan itu. Saat keluar, proses Ruby milik Rake masih memiliki lingkungan aslinya, dan panggilan sh berikutnya mewarisinya lagi.

Untuk mengubah proses Ruby bagi pekerjaan berikutnya:

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

Itu memengaruhi anak proses berikutnya dan kode Ruby yang membaca kunci tersebut. Itu tidak mengonfigurasi ulang terminal yang semula menjalankan Rake.

Untuk satu perintah anak, berikan lingkungannya secara langsung:

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

Antarmuka peluncuran proses Ruby memperlakukan nilai nil sebagai penghapusan dari lingkungan anak tersebut. Rake meneruskan daftar argumen ke antarmuka itu, membiarkan ENV-nya sendiri tidak berubah.

Hapus kunci yang relevan bagi klien sebenarnya. Operasi HTTPS juga dapat memakai https_proxy, dan sebagian klien membaca ALL_PROXY atau berkas konfigurasi lain. Menghapus satu kunci HTTP saja bukan instruksi rute langsung yang universal.

Bentuk banyak argumen menjaga argumen executable tetap terpisah. Tidak perlu menyusun string shell yang berisi perintah penghapusan dan URL.

Artikel terkait