Зависимости от задачи на Fabric

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

Нека опростим проблема и кажем, че имам две задачи: build и deploy. Задачата build трябва да изгради нашия код, а задачата deploy ще го прехвърли на сървър за внедряване.

Сега, deploy очевидно зависи от build, но build също може да бъде самостоятелна задача. Така че някой може просто да изгради кода с fab build или да внедри кода с fab build deploy. Но също така искам хората да използват fab deploy за удобство, но тогава първо трябва да стартира build. Но build трябва да се изпълнява само веднъж.

Така че, ако включа build в задачата deploy и след това направя fab build deploy, тя ще изпълни build два пъти и след това deploy.


person Timo D    schedule 30.12.2014    source източник
comment
Ако сегашното ми разбиране е правилно, единственият начин да се симулира това изисква функционалност в момента с плат е да се направи подклас от базов клас на задача. Но за вашия случай подкласирането изглежда пресилено. Ако процесът на изграждане е скъп, бих включил проверка дали е необходимо изграждане.   -  person tobltobs    schedule 02.01.2015
comment
Подкласирането звучи като разумен подход, но успях да го направя малко по-просто. Благодаря за коментара ти   -  person Timo D    schedule 02.01.2015


Отговори (1)


Успях да направя това с runs_once декоратор и execute функция.

Задачата build вече е украсена с runs_once и всяка задача, която зависи от build, напр. deploy, ще направи execute(build) в началото. Това ще изпълни задачата за изграждане или тихо ще се провали, ако вече е била изпълнена (благодарение на декоратора).

Това е по-скоро заобиколно решение, отколкото решение, но работи в моя случай. Независимо от това, благодаря на всички за приноса им

person Timo D    schedule 02.01.2015
comment
Благодаря за хубавото решение - напомня ми за кеширане при динамично програмиране. Бихте могли (както аз се каня да направя) да създадете зависим декоратор, който извиква функциите, които се предават, преди да извика основната функция. Това прави кода по-описателен в известен смисъл. Също така променям задачата, за да включа run_once. - person Att Righ; 21.01.2020