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

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

اعمال به روزرسانی های کد

به طور کلی ، چرخه توسعه محتوا ما شامل نوشتن / به روز رسانی کد ، ساختمان ، اجرا و اشکال زدایی آن.

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

اکنون ما آنالیز می کنیم. نحوه بهینه سازی مرحله ساخت در طول توسعه. در هنگام تغییر کد منبع پایتون ، مرحله ساخت با زمان ساخت تصویر مطابقت دارد. برای بدست آوردن به روزرسانی های کد پایتون در ظرف قبل از راه اندازی ، این تصویر مجدداً احیا شده است.

با این وجود می توانیم بدون ایجاد تصویر ، تغییرات کد را اعمال کنیم. ما می توانیم این کار را با اتصال مستقیم فهرست منبع محلی به مسیر آن در ظرف انجام دهیم. برای این کار ، پرونده نوشتن را به شرح زیر به روز می کنیم:

docker-compose.yaml

...
برنامه:
build: app
راه‌اندازی مجدد: همواره
دوره:
- ./app/src:/codeamez19659010 مؤثر19459013] ... [19659014] با این کار ، ما مستقیماً به کد به روز شده دسترسی داریم و بنابراین می توانیم از ساخت تصویر صرفنظر کنیم و ظرف را مجدداً راه اندازی کنیم تا فرآیند پایتون بارگیری مجدد شود.

علاوه بر این ، ما می توانیم از دوباره کارآیی ظرف جلوگیری کنیم ، اگر در داخل آن یک فرآیند بارگذاری مجدد قرار بگیریم که تغییرات را تماشا می کند و باعث می شود که یک بار تغییر فرآیند پایتون شروع شود. ما باید اطمینان حاصل کنیم که کد منبع را در پرونده Compose همانطور که قبلاً توضیح داده شد ، اتصال داده ایم.

در مثال ما از چارچوب Flask استفاده می کنیم که در حالت اشکال زدایی ، یک ماژول بسیار مناسب به نام reloader را اجرا می کند. بارگذاری مجدد همه پرونده های منبع منبع را تماشا می کند و هنگام تشخیص تغییر پرونده ، سرور را مجدداً راه اندازی مجدد می کند. برای فعال کردن حالت اشکال زدایی ، فقط باید پارامتر اشکال زدایی را به صورت زیر تنظیم کنیم:

server.py

server.run (debug = True ، host = '0.0.0.0' ، بندر = 5000 )

اگر گزارش های مربوط به برنامه برنامه را بررسی کنیم می بینیم که سرور فلاسک در حالت اشکال زدایی در حال اجرا است.

$ docker-compose logs program
اتصال به پروژه_app_1
] app_1 | * سرویس برنامه "سرور" فلاسک (بارگیری تنبل)
app_1 | * محیط: تولید
app_1 | اخطار: این یک سرور توسعه است. از آن در استقرار تولید استفاده نکنید.
app_1 | به جای آن از یک سرور WSGI تولید استفاده کنید.
app_1 | * حالت اشکال زدایی: در
app_1 | * در حال اجرا در http://127.0.0.1:5000/ (برای رها کردن CTRL + C را فشار دهید)
app_1 | * راه اندازی مجدد با stat
app_1 | * اشکال زدایی فعال است!
app_1 | * پین اشکال زدایی: 315-974-099

پس از به روزرسانی کد منبع و ذخیره ، باید اعلان ها را در سیاهههای مربوط مشاهده کرده و بارگذاری مجدد شود.

$ برنامه logs-compose logs
پیوستن به project_app_1
app_1 | * سرویس برنامه "سرور" فلاسک (بارگیری تنبل)
...
app_1 | * پین اشکال زدایی: 315-974-099
app_1 | * تغییر در '/code/server.py' مشاهده شد ، بارگذاری مجدد
app_1 | * راه اندازی مجدد با stat
app_1 | * اشکال زدایی فعال است!
app_1 | * پین اشکال زدایی: 315-974-099

کد اشکال زدایی

ما می توانیم کد را به دو روش اشکال زدایی کنیم.

اول روش قدیمی پیرامون قرار دادن بیانیه های چاپ در سراسر کد برای بررسی مقدار زمان اجراء اشیاء / متغیرها است. استفاده از این روش در فرآیندهای کانتینر شده کاملاً واضح است و ما به راحتی می توانیم با استفاده از یک دیباگر docker-comps logs را بررسی کنیم.

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

هنگام اجرا در حالت اشکال زدایی ، جدا از ماژول بارگذاری مجدد ، شامل یک اشکال زدایی تعاملی نیز می شود. فرض کنید ما برای به وجود آوردن یک استثنا ، کد را به روز می کنیم ، سرویس فلاسک پاسخ مفصلی را با استثنا برمی گرداند.

یکی دیگر از موارد جالب برای ورزش اشکال زدایی تعاملی است که در آن ما نقاط شکست را در کد قرار می دهیم و یک بازرسی زنده انجام می دهیم. برای این کار ما نیاز به یک IDE با پایتون و پشتیبانی از اشکال زدایی از راه دور داریم. اگر تصمیم بگیریم به Visual Studio Code تکیه کنیم تا نحوه نمایش اشکال زدایی در مورد کد پایتون را که در ظروف در حال اجراست نشان دهیم ، باید موارد زیر را انجام دهیم تا مستقیماً از VSCode به دیباگ از راه دور متصل شویم.

ابتدا ، ما باید بندری را كه از آن استفاده می كنیم به صورت محلی ترسیم كنیم تا به دیباگر وصل شود. ما می توانیم به راحتی این کار را با اضافه کردن نقشه پورت به پرونده Compose انجام دهیم:

docker-compose.yaml

...
برنامه:
build: app
راه‌اندازی مجدد: همواره
دوره:
- ./app/src:/codeamez19659010 EPOSS19459025]
پورت ها:
- 5678: 5678

...

در مرحله بعد ، ما نیاز به وارد کردن ماژول اشکال زدایی در کد منبع داریم و آن را مجبور خواهیم کرد تا در پورت تعریف شده در پرونده کامپوزیت گوش فرا دهد. ما نباید فراموش کنیم که برای نصب بسته اشکال زدایی ، آن را به پرونده وابستگی ها نیز اضافه کنیم و برای سرویس برنامه مجدداً تصویر را بازسازی کنید. برای این تمرین ، ما از بسته های debugger ptvsd که VS Code پشتیبانی می کند ، استفاده می کنیم.

server.py

...
import ptvsd
ptvsd.enable_attach ( آدرس = ( '0.0.0.0' ، 5678 ))
...

requ.txt

Flask == 1.1.1
mysql-connector == 2.2.9

ptvsd == 4.3.2

لازم است به یاد داشته باشیم که برای تغییراتی که در تنظیم ایجاد می کنیم برای پاک کردن تنظیمات کنونی کانتینرها ، باید یک دستور نوشتن پایین را اجرا کنیم و سپس یک docker-compose را اجرا کنیم تا با پیکربندی های جدید در پرونده کامپوزیت مجدداً کار خود را انجام دهد.

در آخر ، ما باید پیکربندی 'Remote Attach' را ایجاد کنیم در VS Code برای راه اندازی حالت اشکال زدایی.

پرتاب برای اجرای پروژه ما باید اینگونه باشد:

{
"نسخه" : "0.2.0 " ،
" configurationations ": [
{
" name ": " Python: Attach Remote "،
"type" : "python" ،
"درخواست" : "ضمیمه" ،
"Port" : 5678 ،
"host" : "localhost" ،
"pathMappings" [1945901]: [
{
"localRoot" : "$ {workspaceFolder} / app / src" ،
[194590284] "remoteRoot"
: "/ کد"
}
]
}
]
}

ما باید مطمئن شویم که نقشه مسیر را بصورت محلی و داخل ظرف به روز می کنیم.

پس از انجام این کار ، می توانیم به راحتی نقاط breakp را در IDE قرار دهیم ، حالت اشکال زدایی را بر اساس پیکربندی که ایجاد کردیم شروع کنیم و سرانجام ، کد را شروع کنیم تا به نقطه شکست برسیم.

نتیجه گیری

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

منابع

  • نمونه پروژه
  • بهترین شیوه های نوشتن Dockerfiles
  • دکر دسک تاپ
  • Docker Compose
  • نمونه اسکلت پروژه