Opsi Fabric -f tidak berfungsi

Saya telah berhasil menggunakan Fabric dari mesin lokal saya untuk sementara waktu sekarang dan akhirnya memiliki skrip penerapan yang layak yang ingin saya panggil selama kaitan pasca-penerimaan untuk git. Untuk mencapai hal ini saya memiliki kode berikut, yang semuanya diverifikasi hingga perintah 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

Saya telah memeriksa setiap langkahnya, dan saya yakin TMPFILE dibuat dengan benar (berisi fabfile saya). Menjalankan langkah-langkah di atas secara manual dengan file yang dibuat di /tmp/ menghasilkan perilaku yang sama.

Bagian terburuknya adalah ini "mengingatkan" saya bahwa saya dapat menggunakan -f untuk menentukan fabfile...yaitu saya.


person Chris Pfohl    schedule 31.07.2013    source sumber
comment
Sepertinya Anda ingin mengatakan $TMPFILE bukannya $TFILE?   -  person devnull    schedule 31.07.2013
comment
Maaf, Anda benar, tapi begitu juga naskah saya... terima kasih atas ketajaman matanya   -  person Chris Pfohl    schedule 31.07.2013


Jawaban (1)


Ini karena ia menginginkan file dengan .py di akhir. Ubah file temp Anda untuk menggunakan ekstensi file ini dan itu akan berfungsi. Ini adalah artefak yang kemungkinan besar ingin izinkan orang menggunakan kelas direktori gaya python seperti fabfile/__init__.py akan diambil dengan -f fabfile

Contoh perilaku ini di sini:

╭─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
Terima kasih, saya akan mencobanya dan memberi tahu Anda hasilnya. - person Chris Pfohl; 01.08.2013
comment
Catatan tambahan: apakah ini didokumentasikan di suatu tempat, atau haruskah saya mengubah dokumennya? - person Chris Pfohl; 01.08.2013
comment
Jadi sekarang sudah berjalan, tapi tidak suka dengan nama filenya (menurut saya): No module named post-receive.12345 +1, terima. Mencoba tanpa dot yang memiliki arti khusus dengan python. - person Chris Pfohl; 01.08.2013
comment
Itu membuatnya berhasil. Terima kasih atas bantuan Anda. Tampaknya fabric tidak dapat menangani karakter khusus apa pun dalam nama file, dan memerlukan file .py. - person Chris Pfohl; 01.08.2013
comment
Mungkin ada baiknya menambahkan catatan ke bagian dokumen untuk tanda dan penemuan fabfile. Meskipun catatan di sini setelah fakta terkait dengan ini, tetapi sebaiknya Anda menambahkan contoh yang lebih eksplisit tentang nama baik dan buruk. - person Morgan; 01.08.2013
comment
Sangat jelas untuk penggunaan tanpa opsi -f. Namun hal ini tidak jelas: Nama spesifik yang akan dicari mungkin diganti pada baris perintah dengan opsi -f ... Misalnya, jika Anda ingin memberi nama fabfile fab_tasks.py, Anda dapat membuat file seperti itu lalu panggil fab -f fab_tasks.py ‹task name› ... Jika nama fabfile yang diberikan mengandung elemen jalur selain nama file (misalnya ../fabfile.py atau /dir1/dir2/custom_fabfile) maka akan dianggap sebagai jalur file dan langsung memeriksa keberadaannya tanpa pencarian apa pun. Sepertinya Anda harus bisa menggunakan nama apa pun. - person Chris Pfohl; 02.08.2013
comment
Terima kasih banyak atas bantuan Anda pada kedua pertanyaan kain saya. - person Chris Pfohl; 02.08.2013