Опция Fabric -f не работает

Я уже некоторое время успешно использую Fabric на своем локальном компьютере и, наконец, у меня есть достойный сценарий развертывания, который я хотел бы вызвать во время хука после получения для git. Для этого у меня есть следующий код, который проверен вплоть до команды fab:

deploy=... # CODE TO DETERMINE IF YOU SHOULD DEPLOY

if [[ $deploy ]] ; then
  TMPFILE="/tmp/$(basename $0).$$.tmp"
  git cat-file blob release:fabfile.py > $TMPFILE
  fab -f $TMPFILE deploy:servername.mycompany.com
  rm $TMPFILE
fi

Я проверил каждый шаг и уверен, что TMPFILE создается правильно (он содержит мой fabfile). Выполнение описанных выше шагов вручную с созданным файлом в /tmp/ приводит к такому же поведению.

Хуже всего то, что это «напоминает» мне, что я могу использовать -f для указания fabfile... которым я являюсь.


person Chris Pfohl    schedule 31.07.2013    source источник
comment
Похоже, вы хотели сказать $TMPFILE вместо $TFILE?   -  person devnull    schedule 31.07.2013
comment
Извините, вы правы, но мой сценарий тоже... спасибо за зоркие глаза   -  person Chris Pfohl    schedule 31.07.2013


Ответы (1)


Это потому, что ему нужен файл с расширением .py в конце. Измените свой временный файл, чтобы использовать это расширение файла, и он будет работать. Это артефакт, скорее всего, из-за того, что fab хочет позволить людям использовать классы каталогов в стиле Python, такие как fabfile/__init__.py, которые будут подобраны с помощью -f fabfile

Пример такого поведения здесь:

╭─mgoose@Macintosh  ~
╰─$ fab -f tmp.py test
[localhost] local: whoami
mgoose

Done.
╭─mgoose@Macintosh  ~
╰─$ mv tmp.py tmp.py.tmp
╭─mgoose@Macintosh  ~
╰─$ fab -f tmp.py.tmp test

Fatal error: Couldn't find any fabfiles!

Remember that -f can be used to specify fabfile path, and use -h for help.

Aborting.
╭─mgoose@Macintosh  ~
╰─$ cat tmp.py.tmp                                                                                                                                                                                                                        1 ↵
from fabric.api import local, task

@task
def test():
    local("whoami")
person Morgan    schedule 01.08.2013
comment
Спасибо, я попробую и сообщу вам о своих результатах. - person Chris Pfohl; 01.08.2013
comment
Боковое примечание: это где-то задокументировано, или мне нужно настроить документы? - person Chris Pfohl; 01.08.2013
comment
Итак, теперь он работает, но ему не нравится имя файла (я думаю): No module named post-receive.12345 +1, принимаю. Попытка без dot, которая имеет особое значение в python. - person Chris Pfohl; 01.08.2013
comment
Это заставило его работать. Спасибо за вашу помощь. По-видимому, ткань не может обрабатывать специальные символы в имени файла и нуждается в файле .py. - person Chris Pfohl; 01.08.2013
comment
Возможно, было бы неплохо добавить примечание в раздел документов для флагов fabfile и обнаружения. Хотя примечание здесь после факта относится к это, но вам было бы полезно добавить более явный пример хороших и плохих имен. - person Morgan; 01.08.2013
comment
Это очень ясно для использования без опции -f. Однако это неясно: конкретное имя для поиска может быть переопределено в командной строке с параметром -f ... Например, если вы хотите назвать свой fab-файл fab_tasks.py, вы можете создать такой файл а затем вызовите fab -f fab_tasks.py ‹имя задачи› ... Если указанное имя fabfile содержит элементы пути, отличные от имени файла (например, ../fabfile.py или /dir1/dir2/custom_fabfile), оно будет рассматриваться как путь к файлу и напрямую проверяется на существование без какого-либо поиска. Похоже, вы должны иметь возможность использовать любое имя вообще. - person Chris Pfohl; 02.08.2013
comment
Большое спасибо за вашу помощь в обоих моих вопросов ткани. - person Chris Pfohl; 02.08.2013