Fabric: "Понятия не имею, что *что-то* такое!" после запуска ткани2

Созданный на 16 авг. 2018  ·  18Комментарии  ·  Источник: fabric/fabric

Я новичок в тканях и у меня проблемы с тем, чтобы заставить его работать. Сначала я установил его через pip3, когда пытался запустить, я получал команду «fab», не найденную, в конце концов я нашел ее в /home/me/.local/bin/fab2.

Это правильное место?

Во-вторых, когда я запускаю его так

/home/me/.local/bin/fab2 version

я получил

(2, 3, 1)
2.3.1
No idea what 'version' is!
import fabric
if hasattr(fabric, '__version__'):
    # For fabric2
    print(fabric.__version_info__)
    print(fabric.__version__)   # for a version tuple
else:
    # for fabric1
    from fabric.api import *
    print(env.version)

Является ли /home/me/.local/bin/fab2 правильным местоположением?
Что такое «Понятия не имею, что такое «версия»!» почему оно появляется?

Самый полезный комментарий

@ajmcateer , у меня тоже была эта проблема. Проблема в том, что новый метод задачи ткани (как обсуждалось здесь - http://docs.fabfile.org/en/1.14/usage/tasks.html) заключается в использовании декоратора @task . Эквивалентный пример «Hello World»:

from fabric import task

<strong i="8">@task</strong>
def hello(ctx):
  print("Hello World")

Запуск «fab hello» дает ожидаемый результат.

Все 18 Комментарий

Он ищет функцию задачи с именем «версия» в fabfile и не находит ее. fab --version делает там то, что вы хотите.

$HOME/.local/bin/ — это место, где pip устанавливает исполняемые «точки входа», когда вы pip install --user ... — вы можете добавить $HOME/.local/bin к PATH (например, в ~/.bash_profile или ~/.bashrc ). Если бы вы сделали sudo pip install Fabric (без --user ), это поместило бы исполняемую точку входа в /usr/local/bin/ , которая, вероятно, уже находится в ваших PATH . Или вы можете вместо этого python -m fabric <fab args> .

Привет, спасибо, ткань -- версия сработала отлично

Я изменил сценарий, чтобы он выглядел так

def hello():
    print("Hello world!")

Я все еще получаю сообщение «Понятия не имею, что такое «привет»!»

Есть ли учебник для ткани 2? У меня чертовски много времени, чтобы заставить что-нибудь работать в нем. Я нашел учебник по ткани 1.14, но на данный момент он не очень полезен, так как ни один из импортов не работает. Я предполагаю, что ткань 2 справляется с этим по-другому.

если я запускаю с fab или fab2, я получаю ту же ошибку

У меня есть ткань в /home/me/fabric

@ajmcateer , у меня тоже была эта проблема. Проблема в том, что новый метод задачи ткани (как обсуждалось здесь - http://docs.fabfile.org/en/1.14/usage/tasks.html) заключается в использовании декоратора @task . Эквивалентный пример «Hello World»:

from fabric import task

<strong i="8">@task</strong>
def hello(ctx):
  print("Hello World")

Запуск «fab hello» дает ожидаемый результат.

У меня есть как from fabric import task , так и декоратор @task .
Тем не менее я получаю сообщение об ошибке «Понятия не имею..».

Дополнительные детали :

$ fab --version 
Fabric 2.3.1
Paramiko 2.4.1
Invoke 1.1.1

$ python --version
Python 3.6.2

$ more tasks.py
#!/usr/bin/env python

from fabric import task

<strong i="10">@task</strong>
def build(c):
    import pdb; pdb.set_trace()
    print("Building!")

$ fab build -f tasks.py
No idea what 'build' is!

@mandravaze , я могу подтвердить, что это сработало для меня, хотя у меня есть задача в fabfile.py (она думает, что это проблема в вашей среде), и я использую следующую строку для вызова
$ потрясающая сборка

он думает, что это проблема в вашей среде

Как я могу устранить неполадки? Какие дополнительные данные вы хотели бы получить?

Какие файлы у вас есть в этом месте? Я думаю, что build() должен быть в fabfile.py, если он там есть, возможно, ваш fab подбирает неправильный файл...

@mandarvaze в вашей команде fab build -f tasks.py есть несколько путаниц.

  • аргументы для самого fab должны стоять перед первым именем задачи, например fab -f tasks.py build
  • флаг -f предназначен для файла конфигурации, а не для набора задач, это флаг -c , например fab -c tasks build (без расширения «.py»!)
  • Для inv (вызов), если файл с задачами — tasks.py в текущем каталоге, указывать его не нужно. Для fab (ткань), если файл с задачами — fabfile.py в текущей директории, указывать его не нужно.

@ploxiln fab -c tasks build работает. 👍
Спасибо.

@ajmcateer , у меня тоже была эта проблема. Проблема в том, что новый метод задачи ткани (как обсуждалось здесь - http://docs.fabfile.org/en/1.14/usage/tasks.html) заключается в использовании декоратора @task . Эквивалентный пример «Hello World»:

from fabric import task

<strong i="9">@task</strong>
def hello(ctx):
  print("Hello World")

Запуск «fab hello» дает ожидаемый результат.

извините за глупый вопрос, но зачем нам аргумент ctx? что это?

в Fabric 2 вам нужно это ctx для фактического запуска команд в правильной системе, например, ctx.run("hostname")

Если ваша проблема заключается в том, что вы получаете эту ошибку для аргумента задачи, возможно, вы передаете аргумент не в его правильном формате, а в том виде, в котором вы назвали свою задачу.

fab mytask --task-name value

нет

fab mytask --task_name value

Я понимаю, что это не то место по проблеме, но, поскольку я оказался здесь, я оставлю это для всех, у кого есть такая же проблема.

в Fabric 2 вам нужно это ctx для фактического запуска команд в правильной системе, например, ctx.run("hostname")

Прежде всего спасибо за информацию!!

К сожалению, я должен сказать, что Fabric 2 совершенно тупой. Логика 2.x очень нелогична, и кажется, что действительно не так много хороших базовых руководств о том, как ее использовать. Например, возможно, я что-то упускаю, но посмотрите на логику 1.x и качество этого туториала по 1.x: https://docs.fabfile.org/en/1.14/tutorial.html. Тогда поищите аналогичный туториал для 2.x....

Неудивительно, что существует неофициальный порт 1.x, и они довольно смело называют его 3.x.

Просто к вашему сведению, что _ни одна_ из этих подробностей о необходимости декоратора @task , необходимости передачи объекта контекста и т. д. присутствует в разделе «Обзор и руководство» общедоступной документации для Fabric: https://docs .fabfile.org/en/1.8/tutorial.html

Я был активным пользователем Fabric 1 и наивно полагал, что это пошаговое руководство учит меня новой семантике для Fabric 2, прежде чем я нашел этот билет задачи. Это может действительно препятствовать принятию, поскольку документы по существу вводят людей в заблуждение.

Я не уверен, как вы оказались на этой странице, вам следует посмотреть https://docs.fabfile.org/en/2.5/getting-started.html.

Спасибо за это! Возможно, это поможет будущим путешественникам добавить толстый заголовок «УСТАРЕЛО» в документах 1-й серии. Я почти уверен, что перешел к этому либо из лучших результатов Google, либо из официальной документации веб-сайта Fabric, и в любом случае я думаю, что, хотя первое не является чем-то, что команда Fabric может контролировать, я подозреваю, что многие потенциальные последователи несут это разочарование, и может быть полезно получить предупреждение о необходимости найти актуальную документацию (официальные документы, размещенные на Python, следуют аналогичному шаблону iirc).

Это может действительно препятствовать принятию, поскольку документы по существу вводят людей в заблуждение.

Совершенно новый пользователь Fabric. Я погуглил «Fabric Python» и щелкнул ссылку «Обзор и руководство». Да, я нашел это действительно запутанным и очень удивлен, что смог пойти неправильным путем так рано в процессе.

Я подозреваю, что многие потенциальные последователи испытывают это разочарование и могли бы извлечь пользу из предупреждения о необходимости найти актуальную документацию (официальная документация, размещенная на Python, следует аналогичному шаблону iirc).

да.

Также обратите внимание, что это страница результатов:

Screenshot from 2020-11-16 22-43-32

Эти ссылки с отступом можно настроить, если вы управляете доменом. Возможно, можно очистить результаты поиска от материалов 1.x, добавив к ним заголовок «УСТАРЕЛО».

Я просто наткнулся на это и, наконец, смог это исправить. С тканью все в порядке.
Вот что я сделал.

╰─$ fab --version
Fabric 2.5.0
Paramiko 2.7.2
Invoke 1.4.1

В моем fabfile.py :

from fabric.tasks import task

<strong i="11">@task</strong>
def test(ctx, title):
    print("ctx:", ctx)
    print("title:", title)

Если я просто запускаю задачу:

╰─$ fab test                                                                                                                                                                                                                      
'test' did not receive required positional arguments: 'title'

Это означает, что он ожидает title в качестве аргумента.
Итак, передайте аргумент:

fab test title="hello world"

Вывод:

ctx: <your current context. Don't worry about it>
title: title=hello world

Но имейте в виду, что переданный аргумент будет строкой. Не забудьте разделить с помощью = .

Например:

<strong i="28">@task</strong>
def test(ctx, title):
    print("ctx:", ctx)
    print("title type:", type(title))
    print("title:", title)
    print("title value:", title.split("=")[1])

бегать:

fab test title="hello world"

Вывод:

ctx: ...
title type: <class 'str'>
title: title=hello world
title value: hello world

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

peteruhnak picture peteruhnak  ·  4Комментарии

acdha picture acdha  ·  4Комментарии

neemxyang picture neemxyang  ·  6Комментарии

bitprophet picture bitprophet  ·  4Комментарии

yuvadm picture yuvadm  ·  5Комментарии