Fabric: "ليس لدي فكرة ما هو * شيء *!" بعد تشغيل القماش 2

تم إنشاؤها على ١٦ أغسطس ٢٠١٨  ·  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 decorator. مثال "Hello World" المكافئ هو:

from fabric import task

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

يؤدي تشغيل "fab hello" إلى الحصول على الإخراج المتوقع.

ال 18 كومينتر

إنها تبحث عن وظيفة مهمة تسمى "نسخة" في ملف فابليزي ولا تعثر على واحدة. fab --version يفعل ما تريده هناك.

$HOME/.local/bin/ هو المكان الذي يتم فيه تثبيت نقطة الدخول "نقاط الدخول" القابلة للتنفيذ عند 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 ، أحصل على نفس الخطأ

لدي نسيج في / المنزل / أنا / النسيج

ajmcateer ، لدي هذه المشكلة أيضًا. تكمن المشكلة في أن طريقة مهمة النسيج الجديدة (كما تمت مناقشته هنا - http://docs.fabfile.org/en/1.14/usage/tasks.html) هي استخدام task decorator. مثال "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 (استدعاء) ، إذا كان الملف الذي يحتوي على المهام هو Task.py في الدليل الحالي ، فلن تحتاج إلى تحديده. بالنسبة إلى fab (fabric) ، إذا كان الملف الذي يحتوي على المهام هو fabfile.py في الدليل الحالي ، فلن تحتاج إلى تحديده.

ploxiln fab -c tasks build يعمل. 👍
شكرا.

ajmcateer ، لدي هذه المشكلة أيضًا. تكمن المشكلة في أن طريقة مهمة النسيج الجديدة (كما تمت مناقشته هنا - http://docs.fabfile.org/en/1.14/usage/tasks.html) هي استخدام task decorator. مثال "Hello World" المكافئ هو:

from fabric import task

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

يؤدي تشغيل "fab hello" إلى الحصول على الإخراج المتوقع.

آسف لسؤال غبي ، لكن لماذا نحتاج إلى "ctx"؟ ما هذا؟

في النسيج 2 ، تحتاج إلى هذا ctx لتشغيل الأوامر على النظام الصحيح ، على سبيل المثال ، ctx.run("hostname")

إذا كانت مشكلتك هي تلقي هذا الخطأ لوسيطة مهمة ، فقد يرجع السبب في ذلك إلى أنك لا تمرر الوسيطة بتنسيقها الصحيح ، ولكن بسبب الطريقة التي تم بها تسمية مهمتك.

fab mytask --task-name value

ليس

fab mytask --task_name value

أدرك أن هذا ليس موضعيًا للمسألة ، ولكن منذ أن انتهيت من هنا ، سأترك هذا لأي شخص آخر لديه نفس المشكلة.

في النسيج 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

شكرا على ذلك! ربما سيساعد المسافرين في المستقبل على إلقاء عنوان "مهمل" سمين على مستندات السلسلة الأولى. أنا متأكد تمامًا من أنني قمت بالانتقال إلى هذا إما من إحدى نتائج google المهمة أو من مستندات موقع الويب النسيجية الرسمية ، وفي كلتا الحالتين أعتقد أنه بينما لا يكون الأمر الأول شيئًا يمكن لفريق Fabric التحكم فيه ، أظن أن العديد من المتبنين المحتملين يتكبدون هذا الإحباط وقد يستفيد من التنبيه إلى الحاجة إلى العثور على المستندات المحدثة (تتبع مستندات Python الرسمية المستضافة نمطًا مشابهًا iirc).

قد لا يشجع ذلك حقًا على التبني لأن المستندات مضللة بشكل أساسي للأشخاص على متن الطائرة.

مستخدم جديد لـ Fabric. لقد بحثت في Google على "Fabric Python" ، ثم نقرت على الرابط الذي يشير إلى "Overview and Tutorial". نعم ، لقد وجدت هذا محيرًا حقًا وأنا مندهش جدًا لأنني تمكنت من السير في الاتجاه الخطأ في وقت مبكر من هذه العملية.

أظن أن العديد من المتبنين المحتملين يعانون من هذا الإحباط وقد يستفيدون من تنبيههم بالحاجة إلى العثور على المستندات المحدثة (تتبع مستندات 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 التقييمات