Foreman: هل من الممكن دعم الأوامر متعددة الأسطر في السطر؟

تم إنشاؤها على ٧ نوفمبر ٢٠١٤  ·  9تعليقات  ·  مصدر: ddollar/foreman

لنفترض أن لدي هذا السخف 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

ال 9 كومينتر

مثال أبسط لأن المثال الأول كان أكثر تعقيدًا بقليل من أجل محاولة نقل الدافع بشكل أفضل قليلاً.

[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 معين وطباعة أنواع العمليات المكتشفة. المعلومات الوحيدة التي يجب أن تستمد منها هي ما إذا كان رئيس العمال نفسه سيعمل بنجاح أم لا.

https://github.com/ddollar/foreman/blob/876354f28b0f1e182f8d0b8b67fc06307fd12631/lib/foreman/cli.rb#L68 -L71

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

Svalorzen picture Svalorzen  ·  9تعليقات

abrambailey picture abrambailey  ·  3تعليقات

MathieuGilbert picture MathieuGilbert  ·  18تعليقات

rvanlieshout picture rvanlieshout  ·  3تعليقات

dunkstewart picture dunkstewart  ·  12تعليقات