2014-04-06 21 views
7

Có thể thiết lập Pycharm để thực hiện bước qua một fabfile.py Vải không?Làm thế nào để bạn thiết lập Pycharm để gỡ lỗi một fabfile Vải trên Windows?

Dường như việc này có thể thực hiện được với trình chỉnh sửa cấu hình chạy/gỡ lỗi nhưng dường như tôi không thể nhận được cài đặt vừa phải. Trình soạn thảo yêu cầu một tập lệnh chạy và tôi đã thử tệp fab-script.py nó chỉ cho tôi các tùy chọn trợ giúp fab.

Dường như tôi gần nhưng không hoàn toàn ở đó.

+0

Nhân đôi: http://stackoverflow.com/questions/19839989/debugging-fabfiles-using-an-ide – Emer

Trả lời

11

Đây là cách tôi đã thiết lập điều này trong trường hợp điều này hữu ích cho người khác. Như với hầu hết những thứ như thế này, một khi bạn biết các thiết lập ma thuật, nó rất dễ dàng. Tất cả các hướng dẫn này là thông qua PyCharm nhưng một số trong chúng có thể được thực hiện theo những cách khác nhau. Tuy nhiên, vì điều này là về gỡ lỗi trong PyCharm, đó là những gì tôi đang sử dụng cho các hướng dẫn. Ngoài ra, tôi đang sử dụng Windows.

Cài đặt gói Vải vào môi trường dự án (sử dụng Cài đặt -> Cài đặt gói phiên dịch dự án). Thao tác này sẽ cài đặt Fabric vào thư mục gói trang web của môi trường ảo cũng như đặt tệp fab.exe và fab-script.py trong thư mục/Scripts. Tìm vị trí của tệp fab-scripts.py và sao chép đường dẫn (ví dụ như “C: \\ Scripts \ fab-script.py”)

Bây giờ, hãy tạo cấu hình chạy (Chạy -> Chỉnh sửa cấu hình … -> Python) với tên tệp kịch bản lệnh này. Các tham số Script trỏ tới fabfile.py và lệnh để thực hiện/gỡ lỗi. Các tham số Script là: -f fabfile dev: Triển khai "MyBranch1" Điều này cho phép tôi gỡ lỗi tác vụ "dev" với tham số "MyBranch1" rồi chạy tác vụ "deploy". Thay thế dev: "MyBranch1" triển khai với bất kỳ tên tác vụ của bạn là gì. Thư mục làm việc trỏ đến thư mục dự án của bạn cũng là nơi đặt fabfile.py (ít nhất là với cấu hình của tôi). Thiết lập của tôi trông như thế này.
RunDebug Configuration

Mở fabfile.py và đặt điểm ngắt nơi bạn muốn dừng trình gỡ lỗi. Trong trường hợp này, vì tôi đang gỡ lỗi nhiệm vụ triển khai, tôi đặt điểm ngắt ở đó. enter image description here

Bây giờ để gỡ lỗi chạy fab, hãy đặt cấu hình hoạt động thành cấu hình được thực hiện và nhấp vào gỡ lỗi. enter image description here

Khi breakpoint là hit, bạn tắt và gỡ lỗi fabfile.py vải của bạn với PyCharm

Khi bạn đã sẵn sàng để chạy fabfile sửa lỗi bạn, hãy mở Terminal và chạy lệnh fab với các thông số sử dụng trong quá trình gỡ lỗi. Một lần nữa, trỏ dấu nhắc lệnh vào thư mục dự án (làm việc). (Chú ý: Các fab.exe trong thư mục Scripts cần phải được thực thi từ dòng lệnh - bằng cách để nó trong biến môi trường sở hữu con đường) enter image description here

+0

Trong linux thử, Script: '/ usr/local/bin/fab' nếu bạn đang ở trong virtualenv, nguồn nó và sử dụng đầu ra của 'fab' – Emer

0

Các fab thực thi là gì, nhưng một kịch bản python đơn giản. Ví dụ, với Vải 1.10.2 nó chỉ này (mặc dù tôi đã bỏ qua công việc và các dòng mã hóa):

import re 
import sys 

from fabric.main import main 

if __name__ == '__main__': 
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) 
    sys.exit(main()) 

nghĩa là: tất cả những gì thực sự đang làm là gọi fabric.main.main(). Tôi không chắc chắn lý do tại sao nó được subbing ra các cửa sổ mở rộng trong sys.argv[0], nhưng nó không thực sự quan trọng.

Nếu bạn muốn gỡ lỗi tệp fabfile, chỉ cần đặt tệp fab.py làm tập lệnh được IDE gỡ lỗi hoặc tạo một tệp sơ khai nhỏ gọi vải main() và gỡ lỗi đó.Sau đó, bạn có thể đặt các điểm ngắt bất cứ nơi nào trong fabfile của bạn, (hoặc bất kỳ thứ gì fabfile của bạn nhập khẩu) như bạn làm với bất kỳ chương trình python nào khác.

Ngoài ra, phần chính bạn cần là để có thể chuyển đối số cho tập lệnh được thực thi sao cho chúng hiển thị trong sys.argv. Làm thế nào để làm điều này phụ thuộc vào IDE/debugger của bạn. Hoặc, bạn chỉ có thể nhét chúng vào chính mình, như sau:

import sys 
from fabric.main import main 

sys.argv[1:] = ["task1",."task2"] #or whatever you would give fab. 
main() 

Sử dụng phương pháp IDE/trình gỡ lỗi của bạn tốt hơn nhiều, tất nhiên.

0

Tôi đã làm theo hướng dẫn ở trên trong ảnh chụp màn hình. Xin lưu ý rằng fab-script trên nên chứa:

import fabric.main 

if __name__ == '__main__': 
    fabric.main.main() 
Các vấn đề liên quan