Fabric: "Tidak tahu apa *sesuatu* itu!" setelah menjalankan fabric2

Dibuat pada 16 Agu 2018  ·  18Komentar  ·  Sumber: fabric/fabric

Saya baru mengenal kain dan mengalami kesulitan membuatnya bekerja. Saya menginstalnya melalui pip3 pertama ketika saya mencoba menjalankannya saya mendapatkan Command 'fab' not found, akhirnya saya menemukannya di /home/me/.local/bin/fab2.

Apakah ini tempat yang benar?

Kedua setiap kali saya menjalankannya seperti itu

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

saya mendapat

(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)

Apakah /home/me/.local/bin/fab2 lokasi yang benar?
Apa itu 'Tidak tahu apa 'versi' itu!' kenapa muncul?

Komentar yang paling membantu

@ajmcateer , saya juga punya masalah ini. Masalahnya adalah bahwa metode tugas fabric baru (seperti yang dibahas di sini - http://docs.fabfile.org/en/1.14/usage/tasks.html) adalah menggunakan dekorator @task . Contoh "Hello World' yang setara adalah:

from fabric import task

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

Menjalankan 'fab hello' menghasilkan output yang diharapkan.

Semua 18 komentar

Itu mencari fungsi tugas bernama "versi" di fabfile dan tidak menemukannya. fab --version melakukan apa yang Anda inginkan di sana.

$HOME/.local/bin/ adalah tempat pip menginstal "entrypoints" yang dapat dieksekusi ketika Anda pip install --user ... - Anda dapat menambahkan $HOME/.local/bin ke PATH Anda (mis. di ~/.bash_profile Anda atau ~/.bashrc ). Jika Anda melakukannya sudo pip install Fabric (tanpa --user ) itu akan menempatkan titik masuk yang dapat dieksekusi di /usr/local/bin/ yang mungkin sudah ada di PATH Anda. Atau Anda mungkin dapat python -m fabric <fab args> sebagai gantinya.

Hai terima kasih kain --versi bekerja dengan baik

Saya mengubah skrip menjadi seperti ini

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

Saya masih mendapatkan 'Tidak tahu apa itu 'halo'!'

Apakah ada tutorial untuk fabric 2 Saya kesulitan mendapatkan sesuatu untuk bekerja di dalamnya. Saya menemukan tutorial untuk fabric 1.14 tetapi itu tidak terlalu membantu saat ini karena tidak ada impor yang berfungsi. Saya berasumsi fabric 2 menanganinya secara berbeda.

jika saya menjalankan dengan fab atau fab2 saya mendapatkan kesalahan yang sama

Saya memiliki kain di /home/me/fabric

@ajmcateer , saya juga punya masalah ini. Masalahnya adalah bahwa metode tugas fabric baru (seperti yang dibahas di sini - http://docs.fabfile.org/en/1.14/usage/tasks.html) adalah menggunakan dekorator @task . Contoh "Hello World' yang setara adalah:

from fabric import task

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

Menjalankan 'fab hello' menghasilkan output yang diharapkan.

Saya memiliki dekorator from fabric import task serta @task .
Masih saya mendapatkan kesalahan 'Tidak tahu ..'.

Detil tambahan :

$ 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 , saya dapat mengonfirmasi itu berfungsi untuk saya, meskipun saya memiliki tugas di fabfile.py (menurut saya ini adalah masalah di env Anda) dan saya menggunakan baris berikut untuk menelepon
$bangunan luar biasa

itu pikir ini adalah masalah di lingkungan Anda

Bagaimana saya bisa memecahkan masalah? Data tambahan apa yang Anda inginkan?

File apa yang Anda miliki di lokasi ini? Saya pikir build() harus di fabfile.py, jika ada, mungkin fab Anda mengambil file yang salah...

@mandarvaze dalam perintah Anda fab build -f tasks.py ada beberapa kebingungan.

  • argumen untuk fab itu sendiri harus muncul sebelum nama tugas pertama, seperti fab -f tasks.py build
  • flag -f adalah untuk file konfigurasi, bukan untuk kumpulan tugas, itu adalah flag -c , seperti fab -c tasks build (tidak ada ekstensi ".py"!)
  • Untuk inv (panggil), jika file dengan tugas adalah task.py di direktori saat ini, Anda tidak perlu menentukannya. Untuk fab (kain), jika file dengan tugas adalah fabfile.py di direktori saat ini, Anda tidak perlu menentukannya.

@ploxiln fab -c tasks build berfungsi. 👍
Terima kasih.

@ajmcateer , saya juga punya masalah ini. Masalahnya adalah bahwa metode tugas fabric baru (seperti yang dibahas di sini - http://docs.fabfile.org/en/1.14/usage/tasks.html) adalah menggunakan dekorator @task . Contoh "Hello World' yang setara adalah:

from fabric import task

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

Menjalankan 'fab hello' menghasilkan output yang diharapkan.

maaf untuk pertanyaan bodoh, tetapi mengapa kita membutuhkan 'ctx' arg? apa itu?

di fabric 2 Anda memerlukan ctx ini untuk benar-benar menjalankan perintah pada sistem yang benar, misalnya ctx.run("hostname")

Jika masalah Anda adalah bahwa Anda menerima kesalahan ini untuk argumen tugas, mungkin Anda tidak meneruskan argumen dalam format yang benar, tetapi bagaimana Anda menamai tugas Anda.

fab mytask --task-name value

bukan

fab mytask --task_name value

Saya menyadari ini bukan masalah yang tepat, tetapi karena saya berakhir di sini, saya akan meninggalkan ini untuk orang lain yang memiliki masalah yang sama dengan saya.

di fabric 2 Anda memerlukan ctx ini untuk benar-benar menjalankan perintah pada sistem yang benar, misalnya ctx.run("hostname")

Sebelumnya terima kasih atas infonya!!

Sayangnya, saya harus mengatakan bahwa Fabric 2 benar-benar tumpul. Logika 2.x sangat berlawanan dengan intuisi dan sepertinya tidak ada banyak tutorial dasar yang bagus tentang cara menggunakannya. Misalnya, Mungkin saya melewatkan sesuatu, tetapi lihat logika 1.x dan kualitas tutorial 1.x ini: https://docs.fabfile.org/en/1.14/tutorial.html. Kemudian cari tutorial yang setara untuk 2.x ....

Tidak heran ada port tidak resmi 1.x dan mereka - cukup berani - menyebutnya 3.x

Hanya FYI umum bahwa _none_ dari detail ini sekitar membutuhkan dekorator @task , harus melewati objek konteks, dll. Ada di bagian "Ringkasan dan Tutorial" dari dokumentasi publik untuk Fabric: https://docs .fabfile.org/en/1.8/tutorial.html

Saya adalah pengguna berat Fabric 1 dan secara naif berasumsi bahwa panduan ini mengajari saya semantik baru untuk Fabric 2 sebelum saya menemukan tiket masalah ini. Ini benar-benar dapat mencegah adopsi karena dokumen pada dasarnya menyesatkan bagi orang-orang yang melakukan orientasi.

Saya tidak yakin bagaimana Anda berakhir di halaman itu, Anda harus melihat https://docs.fabfile.org/en/2.5/getting-started.html

Terima kasih untuk itu! Mungkin itu akan membantu pelancong masa depan untuk melemparkan tajuk "DEPRECATED" yang gemuk pada dokumen seri 1. Saya cukup yakin saya menavigasi ke ini baik dari hasil google teratas atau dokumen situs web fabric resmi, dan dalam kedua kasus saya pikir sementara yang pertama bukanlah sesuatu yang dapat dikendalikan oleh tim Fabric, saya curiga banyak pengadopsi potensial yang timbul frustrasi ini dan mungkin mendapat manfaat dari peringatan akan kebutuhan untuk menemukan dokumen terbaru (dokumen resmi yang dihosting Python mengikuti pola yang sama iirc).

Ini benar-benar dapat mencegah adopsi karena dokumen pada dasarnya menyesatkan bagi orang-orang yang melakukan orientasi.

Pengguna baru Fabric. Saya mencari di Google "Fabric Python", dan mengklik tautan yang mengatakan "Ringkasan dan Tutorial". Ya, saya menemukan ini sangat membingungkan dan saya cukup terkejut saya bisa salah jalan di awal proses.

Saya menduga banyak pengadopsi potensial mengalami frustrasi ini dan mungkin mendapat manfaat dari peringatan akan kebutuhan untuk menemukan dokumen terbaru (dokumen resmi yang dihosting Python mengikuti pola yang sama iirc).

Ya.

Juga, perhatikan bahwa ini adalah halaman hasil:

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

Tautan indentasi tersebut dapat dikonfigurasi jika Anda mengontrol domain. Mungkin dimungkinkan untuk menghapus 1.x barang dari hasil pencarian selain menambahkan header "DEPRECATED" pada mereka.

Saya hanya tersandung pada yang satu ini dan akhirnya bisa memperbaikinya. Tidak ada yang salah dengan kainnya.
Inilah yang saya lakukan.

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

Di fabfile.py saya :

from fabric.tasks import task

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

Jika saya hanya menjalankan tugas:

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

Ini berarti mengharapkan title sebagai argumen.
Jadi, berikan argumen:

fab test title="hello world"

Keluaran:

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

Namun perlu diketahui bahwa argumen yang diteruskan akan berupa string. Pastikan untuk membagi dengan = .

Sebagai contoh:

<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])

Lari:

fab test title="hello world"

Keluaran:

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

Apakah halaman ini membantu?
0 / 5 - 0 peringkat