sh 'unset http_proxy' thay đổi shell được khởi chạy cho lệnh gọi đó. Khi nó thoát, tiến trình Ruby của Rake vẫn giữ môi trường ban đầu, và một lệnh gọi sh sau đó lại kế thừa nó.

Để thay đổi tiến trình Ruby cho công việc tiếp theo:

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

Điều đó ảnh hưởng đến các tiến trình con sau này và mã Ruby đọc các khóa đó. Nó không cấu hình lại terminal đã khởi chạy Rake ban đầu.

Đối với một lệnh con, hãy cung cấp môi trường của nó trực tiếp:

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

Giao diện khởi chạy tiến trình của Ruby coi các giá trị nil là việc xóa khỏi môi trường của tiến trình con đó. Rake chuyển danh sách đối số cho giao diện đó, giữ nguyên ENV của chính nó.

Hãy xóa các khóa liên quan đến client thực tế. Một thao tác HTTPS cũng có thể dùng https_proxy, và một số client đọc ALL_PROXY hoặc một tệp cấu hình khác. Chỉ xóa một khóa HTTP không phải là chỉ dẫn tuyến trực tiếp phổ quát.

Dạng nhiều đối số giữ các đối số của tệp thực thi tách biệt. Không cần tạo chuỗi shell chứa lệnh xóa và một URL.

Bài viết liên quan