Настройки на VPN инструмента: среда при стартиране или експорт в куката?
Куката стартира свои собствени дъщерни процеси, а не обвивката, която вече сте отворили. Средата при стартиране държи частната крайна точка само в единствената команда, на която тя е нужна.
VPN кука, която експортира крайна точка на API, променя средата на процесите, които тя стартира, а не на терминала, който вече е бил отворен, когато тунелът е тръгнал. Тази една разлика обяснява повечето сигнали „инструментът все още вика публичната крайна точка“. Има две работещи места за настройката и изборът зависи от това кой я консумира и колко често се променя. Сравнете ги, преди да добавите още един стартов скрипт.
Две места, където може да живее настройката
Първият вариант е префикс върху самата команда: стойността съществува за това едно извикване и изчезва с него. Вторият вариант е експорт вътре в куката за свързване, който достига до всеки процес, който куката стартира след това. Те се различават по обхват и живот, не по синтаксис, и тази разлика решава повечето откази.
| Property | Prefix on the command | Export from the hook |
|---|---|---|
| Who receives it | That invocation only | Children the hook starts |
| Lifetime | Until the process exits | Until the hook's own session ends |
| Leakage | Scoped to one command | Applies to later commands in that session |
| Repeat cost | Every invocation | Once per connection |
| Works for an open editor | No, unless the editor is started with it | No |
Таблицата прави куката да изглежда евтина и скрива истинската сметка: тя също избира частна крайна точка за команди, които нямат нищо общо със задачата. Четете всеки ред като ограничение, а не като предпочитание. Ако крайната точка се мени за всяка задача, префиксът печели по точност, макар да струва едно натискане.
Защо куката не може да достигне до вече отворена обвивка
Променливите на средата се предават на процес, когато образът на процеса се създава. Обвивка, стартирала преди връзката, пази полученото копие, а експорт, изпълнен вътре в куката, не е разпращане до всеки процес на машината. Само собствените дъщерни процеси на куката го наследяват. Дъщерните процеси на обвивката вземат това, което обвивката държи в момента на стартирането им, и затова една и съща команда може да работи в един терминал и да се провали в друг.
Същото важи и за графичен редактор. Неговият хост за разширения, вграденият терминал и фоновият езиков сървър са се разклонили при стартирането и държат свои копия. Повторното отваряне на папка не рестартира непременно тези дъщерни процеси, така че добавената настройка пак не пристига.
Най-евтиният тест е да отпечатате променливата от мястото, което се проваля, а не от обвивката, която работи. Ако процесът, който се проваля, е стартирал преди тунела, експортът въобще не е имал шанс.
Формата за отделна команда, изписана
Префиксът държи избора видим в командата, която го използва, което помага, когато крайната точка се мени между задачи:
env INTERNAL_API='https://internal-api.example.net:8443' my-work-tool
Командата е примерна: my-work-tool е заместител, а INTERNAL_API не е стандарт на VPN, затова поставете документираната настройка на програмата, която действително изпълнявате, и своя одобрен хост. Не поставяйте токен или парола на същия ред, защото те попадат в историята на обвивката.
Когато няколко команди принадлежат на една задача, кратък прегледан скрипт-обвивка задава променливите и след това ги стартира. Така остава едно определение, без стойността да става глобална за всяка бъдеща команда в терминала.
Презаредете, рестартирайте или го оставете
За инструмент, който вече работи, предпочитайте собственото му презареждане или профил на работното пространство, когато има такъв. Иначе запазете работата и рестартирайте компонента, който чете настройката, а това често е езиков сървър, не прозорецът на редактора. Рестартирането на прозореца с допускането, че дъщерните процеси са го последвали, е причината презареждането да изглежда, че не работи.
Прекъсването е отделно решение. Паузата, затварянето или повторното свързване принадлежат на приложението и променливата за крайната точка не ги управлява. Подхождайте на променливата като на конфигурация, която избира адрес, а не като на правило за това кой мрежов трафик може да се използва след това, и двете грижи остават разделими.