Проблем с пътя на Fabfile в Windows

Опитвам се да разположа сайта си с помощта на Fabric и Mercurial. В командния ред на Windows стартирането на hg push работи перфектно без проблеми.

Но когато се опитам да пиша

local("hg push")

във fabfile и го изпълнявам, получавам грешката:

'"hg push"' is not recognized as an internal or external command, operable program or batch file. 

Търсенето в Google ми даде идея, че може да е проблем с променливата PATH в подпроцесите на Python, например тук: Защо команда не е разпозната грешка да се появява само когато прозорец е попълнен?.

можеш ли да ми помогнеш Грешката в Fabric ли е или в моя собствен код?

Благодаря.


person Kevin Burke    schedule 02.05.2011    source източник
comment
В момента Fabric не се поддържа добре в Windows, така че не съм изненадан да видя това да се случва. Ако, моля, включите някои допълнителни подробности, може да е възможно да се справите по-добре; добавете регистриране на грешки с помощта на show('everything', 'debug'): и включете съдържанието на вашия PATH. Освен това включете всички настройки на „env“, които имате към момента.   -  person Chris R    schedule 02.05.2011
comment
Крис Р: Все още не съм сигурен какъв е проблемът. Поставянето на всичко вътре в show('everything','debug') не разкрива повече информация за проблема. Опитах да настроя env.path директно и получих странни резултати, както е споменато по-долу. Промяната на local() на os.system() коригира проблема, особено за проста команда като hg push.   -  person Kevin Burke    schedule 04.05.2011


Отговори (3)


Както Крис Р споменава, ние не правим много поддръжка на Windows, тъй като никой от основните разработчици не е потребител на Windows; трябва да разчитаме на доклади и предложения от нашите по-опитни потребители на Windows.

Изглежда, че това може да е свързано с този наскоро коригиран, но непубликуван бъг -- ще бъде във Fabric 1.0.2, която трябва да излезе скоро. Ако се чувствате смели, можете да го тествате сега чрез:

pip install -e git+git://github.com/bitprophet/[email protected]#egg=Fabric

Ако след това направите fab -V, трябва да пише, че е 1.0.2a -- ако е така, стартирането на вашия fabfile може да работи по-добре. Моля, уведомете ни, ако направите това!

person bitprophet    schedule 02.05.2011
comment
Промяната на local() на os.system() коригира проблема, особено за проста команда като hg push. Моля, уведомете ме, ако искате да подам доклад за грешка. - person Kevin Burke; 04.05.2011
comment
Актуализирането до 1.0.2a, както е описано по-горе, работи за мен. С Fabric 1.0.1 local('echo %PATH%') на windows се провали със съобщение за грешка за неправилно име на файл. С Fabric 1.0.2a същата команда работи според очакванията. - person Andi Albrecht; 23.05.2011
comment
Аз съм на 2.4.0 и все още получавам тази грешка. Освен това имам проблеми с SSH ключовете, които не работят добре с Fabric, но работят добре от терминала. Грешката е свързана с това, че основният SSH клиент не може да разпознае ключовете. - person TheRealChx101; 27.04.2019

Изглежда, че трябва да добавите Mercurial към PATH на процеса Fabric.

Може би нещо като:

fabric.context_managers.path(<path to your hg.exe>)
run('hg push')

Вижте документите за мениджър на контекста на пътя. Не беше ясно дали path се отнася за local команди, но run командите са изрично посочени.

person Tim Henigan    schedule 02.05.2011
comment
Хей, опитах това, но не беше добавяне към env.path. Така че тогава се опитах да настроя директно env.path. Резултатът беше local: PATH=$PATH:"C:\Program Files\Mercurial\hg.exe" hg push Името на файла, името на директорията или синтаксисът на етикета на тома е неправилен. - person Kevin Burke; 04.05.2011

Нито една от предоставените корекции не работи, но се променя

local("hg push")

to

os.system("hg push")

реши проблема.

person Kevin Burke    schedule 16.05.2011
comment
Като нов в Fabric, би било добре да знаете защо това е гласувано против без коментари? какво не е наред с използването на os.system тук? - person jowan sebastian; 18.04.2015
comment
@jowansebastian Защото е лоша практика да се използва system . Плюс това е извън контрола на Fabric. Както и да е, това е гадно за разработчиците на Windows, защото все още не работи на 2.4.0 - person TheRealChx101; 27.04.2019