מעטפת של Rake אינה יכולה לבטל את ה-proxy של Ruby
שנו את ה-ENV של Ruby למשימות מאוחרות יותר או ספקו hash סביבה נפרד לילד במקום לבטל proxy בתוך קריאת sh מבודדת.
sh 'unset http_proxy' משנה את המעטפת שמופעלת עבור אותה קריאה. כשהיא מסתיימת, לתהליך Ruby של Rake עדיין יש את הסביבה המקורית שלו, וקריאת sh מאוחרת יותר יורשת אותה שוב.
כדי לשנות את תהליך Ruby להמשך העבודה:
ENV.delete('http_proxy')
ENV.delete('HTTP_PROXY')
זה משפיע על ילדים מאוחרים יותר ועל קוד Ruby שקורא את המפתחות האלה. הוא לא מגדיר מחדש את המסוף שהפעיל את Rake במקור.
עבור פקודת ילד אחת, ספקו את הסביבה שלה ישירות:
sh(
{ 'http_proxy' => nil, 'HTTP_PROXY' => nil },
'ruby', 'download.rb'
)
ממשק הפעלת התהליכים של Ruby מתייחס לערכי nil כהסרות מהסביבה של אותו ילד. Rake מעביר את רשימת הארגומנטים לממשק הזה ומשאיר את ה-ENV שלו ללא שינוי.
הסירו את המפתחות הרלוונטיים ללקוח בפועל. פעולת HTTPS עשויה גם לצרוך https_proxy, ולקוחות אחדים בודקים ALL_PROXY או קובץ תצורה אחר. הסרת מפתח HTTP אחד בלבד אינה הוראה כללית למסלול ישיר.
הצורה עם כמה ארגומנטים שומרת על ארגומנטי הקובץ ההרצה בנפרד. אין צורך לבנות מחרוזת מעטפת שמכילה פקודת הסרה וכתובת URL.