كيفية تكوين صداقات PHPstorm و xDebug والفروع البعيدة التي تم تجميعها من خلال Docker؟ بسيط للغاية ...

يوم جيد ، هبر!

قبل عام ، كانت عملية تصحيح الأخطاء في PHP تتكون من سطرين:

var_dump($variable); die(); 

من وقت لآخر ، بالطبع ، كان عليّ استخدام منشآت "أكثر تعقيدًا":

 console.log(data); 

 echo json_encode($variable, JSON_UNESCAPED_UNICODE); exit(); 

لا ما انت! كنت أعلم - في عصرنا هذا ليس من المناسب لمبرمج ثقافي أن يفعل ذلك

الحرف القديمة
نكتة عن حرفة قديمة أخرى

لكن بصراحة ، كنت دائمًا خائفة مما لم أفهمه. بما في ذلك طابعات xDebug ، ولا سيما كيفية تكوين هذا الأمر بالكامل. في أحد الأيام الجميلة ، تمكنت من القيام بذلك في سيارتي وفي مشروع محلي - لم يكن هناك حد للفرح. بعد عدة أشهر ، صادفت مشكلة جديدة ، كيفية تصحيح الأخطاء في PHPstorm عبر xDebug ، إذا تم بناء المشروع عن بعد بواسطة عامل الميناء عبر CI.

إذا كنت ، مثلي ، تجد صعوبة في تكوين أشياء مختلفة ، ومرحبًا بك في القطة ، سأتحدث عن تجربتي في إنشاء بيئة تصحيح الأخطاء باستخدام كلمات مخيفة مثل Docker و xDebug و CI.

بالنسبة لأولئك الذين لا يحبون الماء ويريدون الذهاب مباشرة إلى جوهر الإعداد.

لماذا يجب عليك الابتعاد عن طرق التصحيح المتعفنة والتحول إلى التقنيات المناسبة؟


لقد خدعت القطة قليلاً ، لقد انخرطت في تصحيح الأخطاء الحرفية ، ليس فقط لأنني كنت خائفة من تكوين شيء ما ، وليس لأنه كان غبيًا جدًا ، ولكن ببساطة لأنني لم أكن بحاجة إلى شيء أكثر ملاءمة. في معظم الأحيان ، كنت أعمل على مشاريع محليًا على جهاز الكمبيوتر القوي الخاص بي ، ولم تكن المهام معقدة للغاية لدرجة أن عملية التصحيح بدأت في شغل منصب مهم إلى حد ما.

في مرحلة ما ، أدركت بنفسي أنني غير مرتاح ، وحاولت تكوين صداقات xDebug و PHPstorm عند العمل في مشروع محلي. المشكلة هي أن معظم الوثائق والأدلة التي وجدتها تشير ضمنيًا إلى أن الشخص الذي يقرأها على دراية جيدة في مجال الموضوع ويفهم كل شيء ، في حالتي لم يكن الأمر كذلك وقضيت 4-5 في إعداد xDebug الأول ساعات في 2 بعد الظهر. لقد كان الأمر أخلاقيًا صعبًا ، وشعرت بالغباء بلا حدود. ومع ذلك ، اتضح أن كل شيء يعمل!

نعم ، أصبح الأمر أكثر ملاءمة ، محليًا ، في المنزل ، ولكن في العمل الرئيسي قمت بالمواقع عن بُعد ، وفي الغالب لم أتمكن من إما تفريغ الموقع محليًا (بسبب ضعف الجهاز أو عملية النشر غير المريحة) ، أو للتأثير على إعدادات الخادم بسبب الاستضافة ، لذلك ، جعلت التعديلات "مباشرة" وتصحيح الأخطاء في html-commenting print_r (في هذا العمل كان "طبيعيًا" ، على الرغم من أنه ليس فخورًا بهذه التجربة).

الصورة

ومع ذلك ، قبل 3 أشهر ، انتقلت إلى شركة أكثر برودة وبدأت الانخراط في مشروع خطير حقًا مع حمولة عالية. وهنا تغير الكثير بالنسبة لي. البنية التحتية وعملية التطوير هي تقريبًا ما يلي: هناك خادم GitLab ، كل مشروع له مستودعه الخاص ، المهام تأتي إلى Jira ، يمكنك إنشاء فرع حسب أرقام المهام ، عند إنشاء فرع باستخدام CI ، يتم إنشاء صندوق الحماية الخاص بك مع الموقع الذي تعمل فيه بهدوء تلقائيًا ، كل دفعة يعيد تجميع الفرع ، في نهاية العمل الذي تعطيه لمراجعة الشفرة ، صب الفرع في الرئيسي.

كل شيء رائع باستثناء BUT واحد ، كل إعادة بناء فرع في حالتي تستغرق حوالي 10 ثوانٍ. في عملية التطوير نفسها ، يعد هذا وقتًا غير ذي أهمية ، نظرًا لأنني قد تجاوزت المرحلة بالفعل عندما كان عليّ التحقق من قابلية تشغيل الرمز لكل سطر تقريبًا بسبب عدم اليقين وقلة الخبرة. ومع ذلك ، عندما تحولت إلى تصحيح الأخطاء ، بدأت هذه الثواني العشر تلعب دورًا ملموسًا. تبدو عملية تصحيح الأخطاء كما يلي:

  • أضف سطرين
  • تلتزم Pushu
  • أنتظر 10 ثوان
  • تحقق ، انظر ما هو الخطأ
  • كرر

وفقًا للتقديرات التقريبية ، حصل الفرع الجاهز للدمج على ارتباطات مفيدة بنسبة 20٪ تقريبًا و 80٪ من عمليات تصحيح الأخطاء. لنفترض أنني انتهيت من العمل في فرع يحتوي على 300 التزام ، منها 240 التزامًا استهلكت 40 دقيقة فقط من وقت عملي (وهذا هو فقط وقت الانتظار لتجميع الفرع ، مع عدم مراعاة الثواني التي تصل إلى دقائق ، لإضافة سطرين ثم حذفها).

الصورة

في وقت ما كنت قد سئمت منه وقررت تكوين xDebug لجعل عملية التصحيح أقل تكلفة. لسوء الحظ ، إما أن زملائي الحاليين إما لم يستخدموا هذه التكنولوجيا (أنا في انتظار نكتة عن "لدي شركة رائعة حيث لا أحد يستخدم xDebug") ، أو أنهم لا يعرفون / لم يتذكروا كيفية تكوين صداقات مع xDebug IDE عندما يقوم الفرع الذهاب عن بعد من خلال CI ، وبما أنني لم أقم أبداً بتطويره وكما ذكرت أعلاه ، فإن عملية إعداد شيء ما هي عملية مؤلمة بالنسبة لي ، فقد أدت إلى حوالي 6 ساعات من الوقت الخالص ، حتى نجحت في النهاية ، وفهمت العملية وهذا سيكون ملائماً بما يكفي.

عملية الإعداد


لن أخوض في تفاصيل حول كيفية تثبيت CI ، Docker ، بشكل عام ، وكيفية تجميع البنية التحتية ، ومن المفترض أن يتم كل ذلك وكل ما تبقى هو إعداد بيئتك الشخصية.

لنفترض أن المستودع الخاص بنا يحتوي على شيء مثل هذا الهيكل:

الصورة

نحتاج أولاً إلى التحقق مما إذا كان xDebug نفسه في الصورة الحالية ، لذلك يمكنك استخدام phpinfo () ؛

إذا تم تضمين xDebug بالفعل في التجميع - جيد ، إذا لم يكن كذلك ، فراجع هذا المصدر ، الذي ساعدني مباشرة في الإعداد نفسه ، ومع ذلك ، فقد ذهبت بطريقة مختلفة قليلاً.

تكوين php.ini


لكي يعمل كل شيء في النهاية ، هناك إعدادان مهمان بالنسبة لنا:

  • xdebug.remote_enable
  • xdebug.remote_host

في التجميع النهائي للفرع البعيد ، يجب تمكين remote_enable ، وفي remote_host يجب تعيين IP الخاص بجهاز الكمبيوتر الخاص بك على الشبكة. دعنا ندرج هذه الإعدادات في بنائنا.

تحتاج أولاً إلى معرفة مكان تخزين إعدادات php ، ويمكن وضعها إما في /usr/local/etc/php/conf.d/php.ini ، أو يمكن تسمية ملف .ini بشكل مختلف ، في حالتي هو / usr / local / etc / php / conf.d / php-settings.ini . يمكنك معرفة ذلك من إعدادات الصورة المجمعة.

نقوم بإنشاء إعداداتنا الإضافية في فرعنا من خلال نفس ملف php-settings.ini ، ونضعه في ./build_env/php/php-settings.ini
نكتب فيه 2 من الإعدادات المذكورة أعلاه:
xdebug.remote_enable = on
xdebug.remote_host = IP...


بعد ذلك ، نحتاج إلى إضافة هذا الملف إلى إعدادات الصورة "الأصل". أقوم بذلك من خلال المجلدات عن طريق إضافة السطر إلى ./build_env/docker-compose/docker-compose.tmpl:
- ${PROJECT_DIR}/build_env/php/php-settings.ini:/usr/local/etc/php/conf.d/php-settings.ini

هذا ما يبدو عليه docker-compose.tmpl في مشروعي:

الصورة

في المرة التالية التي تقوم فيها بإنشاء الفرع ، يمكنك التحقق مما إذا كانت الإعدادات الجديدة مرتبطة عبر نفس phpinfo () ؛ إذا كانت الإجابة بنعم - ممتاز ، إن لم يكن - فأنت محظوظ وسيتعين عليك أن تسير بنفس الطريقة التي قمت بها في المرة الأولى :(

تخصيص التعيينات في PHPstorm


بعد ذلك ، تحتاج إلى تكوين PHPstorm نفسه. قررت عدم استخدام وكيل DBgp ، حتى لا أقوم بتكوين التعيينات في النافذة المنبثقة في كل مرة. في حالتي ، أستخدم قالب خادم يحتوي على التعيينات اللازمة.

انتقل إلى الإعدادات / التفضيلات | اللغات والأطر | فب | خوادم

  1. قم بإنشاء قالب خادم
  2. الاسم: فرع
  3. المضيف: أي ، لا يؤثر
  4. المنفذ: أي ، لا يؤثر
  5. المصحح: xDebug
  6. ضع داو على استخدام تعيينات المسار
  7. وضعنا التعيينات المناسبة ، يجب أن تتوافق المجلدات المحلية العاملة مع المجلدات الموجودة على الخادم حيث توجد الفروع التي تم جمعها ، وفي حالتي تكون البنيات التي تم جمعها في المجلد / var / www / builds / your_namespace / your_project / your_branch

الصورة

نقوم بحفظ هذه الإعدادات ، وسنقوم بتغييرها في كل مرة نعمل فيها مع فرع جديد. على سبيل المثال ، إذا كنت أعمل اليوم مع فرع web-2233 ، فسوف أقوم بتغيير التعيين إلى / var / www / builds / build_path / web-2233

قم بإضافة متغير بيئة جديد بحيث يقوم IDE بسحب التعيينات تلقائيًا لأعلى


الآن نقطة مهمة وليس النقطة الأكثر وضوحا. عندما نبدأ التصحيح ، يحتاج PHPstorm إلى فهم الملفات المحلية التي تتوافق مع الملفات الموجودة على الخادم البعيد. إذا لم يمنحه الخادم تثبيتًا محددًا ، فستظهر نافذة منبثقة تحتاج فيها إلى تعيين المسارات يدويًا. لكي يأخذ PHPstorm تعيينات على الفور من خادم باسم BRANCH ، تحتاج إلى إضافة متغير بيئة PHP_IDE_CONFIG إلى مجموعتنا

في ./build_env/docker-compose/docker-compose.tmpl إنشاء متغير بيئة جديد في البيئة:
PHP_IDE_CONFIG: ${PHP_IDE_CONFIG}

الصورة

في .gitlab-ci.yml قمنا بتعيين هذا المتغير:
- export PHP_IDE_CONFIG="serverName=BRANCH"

الصورة

انتهى!


لا نحتاج إلى ملحقات المستعرض ، لا نحتاج إلى تمرير URL XDEBUG_SESSION_START = IDE_KEY للحصول على المعلمات ، لسنا بحاجة إلى إضافة تكوينات إضافية.

فقط قم بتشغيل التنصت الصورة وتحديث صفحة الموقع ، بمجرد تعثرنا عند نقطة التوقف الأولى ، سيتوقف التطبيق عندها

الصورة

شكرا لكم على اهتمامكم ، آمل أن تكون هذه المقالة مفيدة وسيوفر شخص ما الوقت دون أن يخطو في نفس أشعل النار مثلي :)

المصادر التي استخدمتها أثناء الإعداد الأولي:
https://gist.github.com/chadrien/c90927ec2d160ffea9c4
https://confluence.jetbrains.com/display/PhpStorm/Docker+Support+in+PhpStorm#DockerSupportinPhpStorm-DebuggingthePHPwebapplicationrunningintheDockercontainer

Source: https://habr.com/ru/post/ar423337/


All Articles