برنامه نویسی

قبل از اشکال زدایی برنامه جنگو در VSCode، یک اسکریپت اجرا کنید

میدونی آزار دهنده چیه؟ اشکال زدایی یک برنامه جنگو و فهمیدن، در نیمه راه، اینکه فراموش کرده اید پایگاه داده خود را بازنشانی کنید یا مهاجرت ها را اجرا کنید. تکراری است، خسته کننده است و از همه بدتر فراموش کردنش آسان است. چرا به ابزارهای شما اجازه نمی دهید آن را برای شما مدیریت کنند؟ اگر از کد ویژوال استودیو استفاده می‌کنید، می‌توانید موارد را طوری تنظیم کنید که هر بار که دیباگر را شروع می‌کنید اسکریپت شما به‌طور خودکار اجرا شود.

در اینجا نحوه انجام آن آمده است – سریع و ساده.


مشکل

فرض کنید شما یک اسکریپت پوسته کوچک به نام دارید setup.sh که محیط شما را آماده می کند:

#!/usr/bin/env bash

source .venv/bin/activate

sudo su - postgres -c "dropdb docrepo"
sudo su - postgres -c "createdb docrepo -O admin"
cd docrepo
python manage.py migrate
cd ..
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این دیتابیس را بازنشانی می کند و مهاجرت ها را اجرا می کند. عالیه اما از اجرای دستی هر بار که اشکال زدایی می کنید خسته شده اید. چرا باید کاری را که کامپیوتر می تواند برای شما انجام دهد را به خاطر بسپارید؟


راه حل: آن را با VSCode خودکار کنید

ترفند اینجا این است که اسکریپت خود را با استفاده از جریان کار اشکال زدایی VSCode متصل کنید tasks.json و launch.json. فقط با یک تنظیم کوچک، می توانید اسکریپت خود را قبل از شروع دیباگر به طور خودکار اجرا کنید.


مرحله 1: وظیفه را تعریف کنید

ابتدا باید به VSCode بگویید که چگونه اسکریپت شما را اجرا کند. باز کردن (یا ایجاد) .vscode/tasks.json و این را اضافه کنید:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Run Pre-Debug Script",
            "type": "shell",
            "command": "./setup.sh",
            "presentation": {
                "reveal": "always"
            },
            "problemMatcher": []
        }
    ]
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در اینجا چه اتفاقی می افتد:

  • "label": نام این کار. در مرحله بعد به آن اشاره خواهید کرد.
  • "command": مسیر اسکریپت شما. مطمئن شوید که قابل اجرا است (chmod +x setup.sh).
  • "presentation": نحوه نمایش خروجی را کنترل می کند. آن را تنظیم کنید "always" بنابراین می توانید ببینید چه اتفاقی می افتد.

مرحله 2: Task را به Debugger متصل کنید

سپس، این وظیفه را به پیکربندی دیباگر خود متصل کنید. باز کنید .vscode/launch.json و تنظیمات دیباگر جنگو را ویرایش کنید:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python Debugger: Django",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/docrepo/manage.py",
            "args": [
                "runserver",
                "--noreload",
                "--nothreading"
            ],
            "django": true,
            "justMyCode": false,
            "autoStartBrowser": false,
            "env": {
                "PYTHONPATH": "${workspaceFolder}/docrepo"
            },
            "preLaunchTask": "Run Pre-Debug Script"
        }
    ]
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • "preLaunchTask": این به دیباگر می گوید که شما را اجرا کند setup.sh کار قبل از شروع
  • "args": استدلال ها به جنگو منتقل شد runserver.

    • --noreload: ویژگی بارگیری مجدد خودکار جنگو را غیرفعال می کند تا اسکریپت شما دوبار اجرا نشود.
    • --nothreading: Multi-threading را غیرفعال می کند، که اشکال زدایی را ساده تر و غیرقابل پیش بینی تر می کند.

مرحله 3: آن را تست کنید

حالا برای قسمت سرگرم کننده. پانل Debug را در VSCode باز کنید، آن را انتخاب کنید "Python Debugger: Django" پیکربندی، و ضربه بزنید F5. این چیزی است که باید اتفاق بیفتد:

  1. شما setup.sh اسکریپت اجرا می شود خروجی را در ترمینال خواهید دید.
  2. پس از اتمام اسکریپت، سرور توسعه جنگو راه اندازی می شود و برای اشکال زدایی آماده است.

اگر چیزی کار نمی کند، خروجی ترمینال را بررسی کنید. اکثر مسائل مربوط به مجوزها هستند (مثلاً مطمئن شوید که اسکریپت شما با آن قابل اجرا است chmod +x setup.sh).


چرا این بهتر است

این تنظیم ساده، واضح است و وقت شما را تلف نمی کند. به‌جای اینکه چندین ترمینال را به‌همراه بیاورید یا سعی کنید یک مرحله دستی دیگر را به خاطر بسپارید، به ابزارهایتان اجازه می‌دهید این کار را برای شما انجام دهند. اشکال زدایی باید برای حل مشکلات برنامه شما باشد، نه مبارزه با گردش کار شما.

اگر تعجب می کنید که چرا --noreload و --nothreading اینجا هستند، به این دلیل است که ویژگی‌های بارگذاری مجدد خودکار جنگو و threading می‌تواند باعث رفتار عجیب و غریب در هنگام اجرای وظایف راه‌اندازی شود. خاموش کردن آنها به شما یک محیط سازگار و قابل پیش بینی می دهد – دقیقاً همان چیزی که هنگام اشکال زدایی می خواهید.


همین است

بدون کرک، بدون پیچیدگی غیر ضروری. اکنون دیباگر شما دقیقاً همان کاری را انجام می دهد که شما نیاز دارید، هر بار. اتوماسیون مانند این شما را آزاد می کند تا روی کار واقعی تمرکز کنید. آیا این همان چیزی نیست که ابزارهای خوب قرار است انجام دهند؟

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا