لنفترض أن لدي هذا السخف Procfile
.
[marca@marca-mac2 ~]$ cat Procfile
find: find ./dev/git-repos -type f -mtime +3 -name '*.py' | xargs grep --max-count 1 'import' | head -n 3
[marca@marca-mac2 ~]$ foreman run find
./dev/git-repos/1pass/.tox/py26/bin/activate_this.py:import sys
./dev/git-repos/ansible/.tox/py26/lib/python2.6/site-packages/ansible/runner/action_plugins/copy.py:import os
./dev/git-repos/ansible/.tox/py34/lib/python3.4/site-packages/pip/_vendor/requests/packages/urllib3/util/timeout.py:from socket import _GLOBAL_DEFAULT_TIMEOUT
حسنًا ، إنه سخيف ولكنه يعمل. لنفترض الآن أنني أردت أن أجعلها أجمل ، وذلك بتقسيم الأمر إلى أسطر متعددة. الخط المائل العكسي هو حرف قياسي لمتابعة السطر ...
[marca@marca-mac2 ~]$ cat Procfile
find: find \
./dev/git-repos \
-type f \
-mtime +3 \
-name '*.py' | \
xargs grep --max-count 1 'import' | \
head -n 3
[marca@marca-mac2 ~]$ foreman run find
usage: find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression]
لا حب.
يمكنني التغلب على هذا عن طريق وضع الأمر في نص برمجي منفصل:
[marca@marca-mac2 ~]$ cat Procfile
find: ./find.sh
[marca@marca-mac2 ~]$ cat find.sh
#!/bin/sh
find \
./dev/git-repos \
-type f \
-mtime +3 \
-name '*.py' | \
xargs grep --max-count 1 'import' | \
head -n 3
[marca@marca-mac2 ~]$ foreman run find
./dev/git-repos/1pass/.tox/py26/bin/activate_this.py:import sys
./dev/git-repos/ansible/.tox/py26/lib/python2.6/site-packages/ansible/runner/action_plugins/copy.py:import os
./dev/git-repos/ansible/.tox/py34/lib/python3.4/site-packages/pip/_vendor/requests/packages/urllib3/util/timeout.py:from socket import _GLOBAL_DEFAULT_TIMEOUT
ولكن بعد ذلك يفقد هذا بعضًا من بساطة وجمال Procfile
- سيكون من الرائع لو أمكنني القيام بذلك بطريقة ما. هل يمكن أن يفسر foreman
الشرطة المائلة للخلف في نهاية السطر على أنها استمرار للسطر؟
نسخة إلى:sudarkoff
مثال أبسط لأن المثال الأول كان أكثر تعقيدًا بقليل من أجل محاولة نقل الدافع بشكل أفضل قليلاً.
[marca@marca-mac2 ~]$ cat Procfile
hello: echo \
"Hello world"
[marca@marca-mac2 ~]$ foreman check
valid procfile detected (hello)
[marca@marca-mac2 ~]$ foreman run hello
[marca@marca-mac2 ~]$
من المثير للاهتمام أن foreman check
يعتقد أن الملف صالح ؛ ومع ذلك فهي لا تعمل كما قد يتوقع المرء.
بصراحة أنا أفضل سيناريو الشل المنفصل من حيث الجمال والبساطة. يجب أن يكون ملف Procfile قصيرًا ولطيفًا. احتفظ بالأوامر المعقدة والمنطق في نصوص الشل. أنا شخصياً أميل إلى إنشاء نصوص bin/*
التي تعين 1: 1 مع إدخالات Procfile الخاصة بي.
حسنًا ، شكرًا على الرد السريع!
ثم foreman check
يجب أن يفشل إذا لم يكن هذا خطأ ، كما أعتقد.
يتجاهل فورمان جميع الأسطر التي لا يتم تحليلها باعتبارها إدخالاً صالحًا لـ Procfile. إذا كنت ترغب في جعل هذا المنطق أكثر تقييدًا ، فسأفكر في طلب سحب ولكن يجب أن يكون متوافقًا مع أي تعليقات عشوائية ، وما إلى ذلك ، وضع الأشخاص في ملفات Procfiles الخاصة بهم.
إذا تجاهل الأسطر غير الصالحة ، فقد يبدو أن الأمر check
غير مفيد للغاية؟ ليست مشكلة كبيرة بالنسبة لي إلا أنني لن أعرف الاعتماد عليها بشكل كبير.
ماذا يحدث إذا أخذ Foreman::Engine#check_procfile
و Foreman::Procfile#parse
strict
والتي من المفترض أن تكون خطأ باستثناء أنها ستكون صحيحة لـ foreman check
و strict
أخبر parse
بعدم تجاهل الأسطر التي لا تتطابق مع regex؟
سيسمح ما سبق لرئيس العمال أن يكون متوافقًا مع الإصدارات السابقة مع أي شيء يقوم به الأشخاص المجنون (على سبيل المثال: كتابة تعليقات بدون بادئة بـ #
) مع السماح لـ check
بفرض معيار أكثر صرامة.
foreman check
بإجراء فحص كافٍ لمعرفة ما إذا كان سيكون قادرًا على العمل ضد ملف Procfile معين وطباعة أنواع العمليات المكتشفة. المعلومات الوحيدة التي يجب أن تستمد منها هي ما إذا كان رئيس العمال نفسه سيعمل بنجاح أم لا.