কেন একজনকে ডকার-কম্পোজ.আইএমএল-তে বুলিয়ান ব্যবহারের অনুমতি নেই?


24

ডকার-কমপোজ.আইএমএল ফাইলটিতে একটি বুলিয়ান সংজ্ঞা দেওয়া হচ্ছে:

environment:
  SOME_VAR: true

এবং চলমান docker upফলাফল:

contains true, which is an invalid type, it should be a string, number, or a null

সমস্যাটি সমাধানের চেষ্টা করা হচ্ছে

  1. সত্যকে যদি সত্যে পরিবর্তন করা হয় তবে সমস্যাটি অব্যাহত থাকে।
  2. ব্যবহার 'true'কোডটি নিজেই গ্রহণ করে না ( প্লে ফ্রেমওয়ার্ক অ্যাপ্লিকেশনটি./target/universal/stage/bin/APPNAME -Dplay.evolutions.db.default.autoApply= , যেমন হয় হয় -Dplay.evolutions.db.default.autoApply=trueবা -Dplay.evolutions.db.default.autoApply=falseপরামিতি ব্যবহার করে শুরু হয় ):

    ভিএআর-এ বুুলিয়ানের পরিবর্তে STRING টাইপ রয়েছে

  3. পরিবর্তনশীল হিসাবে ব্যবহার yesবা এর noফলাফল হিসাবে:

    সত্যটি ধারণ করে, যা একটি অবৈধ প্রকার, এটি একটি স্ট্রিং, সংখ্যা বা শূন্য হওয়া উচিত

  4. yesএকটি স্ক্রিপ্ট ব্যবহার এবং ব্যবহার করে যা yesসত্য কাজগুলিতে রূপান্তর করে

আলোচনা

ডক্স অনুসারে Any boolean values; true, false, yes no, need to be enclosed in quotes to ensure they are not converted to True or False by the YML parser :

পরিবেশ

পরিবেশের ভেরিয়েবল যুক্ত করুন। আপনি কোনও অ্যারে বা অভিধান ব্যবহার করতে পারেন। যে কোনও বুলিয়ান মান; সত্য, মিথ্যা, হ্যাঁ না, তারা ওয়াইএমএল পার্সার দ্বারা সত্য বা মিথ্যাতে রূপান্তরিত হচ্ছে না তা নিশ্চিত করার জন্য উদ্ধৃতিগুলিতে আবদ্ধ হওয়া দরকার।

শুধুমাত্র একটি কী সহ পরিবেশগত ভেরিয়েবলগুলি মেশিনে তাদের মানগুলির সমাধান করা হয় রচনা চলছে যা গোপন বা হোস্ট-নির্দিষ্ট মানগুলির জন্য সহায়ক হতে পারে।

environment:
  RACK_ENV: development
  SHOW: 'true'
  SESSION_SECRET:

environment:
  - RACK_ENV=development
  - SHOW=true
  - SESSION_SECRET

প্রশ্ন

কেন এটি অনুমোদিত নয়?


4
ডিভোপস সম্পর্কে নয়? DevOps Stack Exchange is a question and answer site for software engineers working on automated testing, continuous delivery, service integration and monitoring, and building SDLC infrastructure
030

1
@ অররা0001 প্রশ্ন আপডেট হয়েছে
030

উত্তর:


18

এটি বুলিয়ান সম্পর্কে YAML ভাষার একটি নকশা পছন্দ থেকে আসে

এই "রেজেক্স" এর সাথে মেলে প্রতিটি অব্যক্ত মান:

 y|Y|yes|Yes|YES|n|N|no|No|NO
|true|True|TRUE|false|False|FALSE
|on|On|ON|off|Off|OFF

True বা রূপান্তরিত হবে False

আপনার কোডটি পরিবেশগত মানটি হ্যাঁ বা না হ'ল উদাহরণ হিসাবে এই স্ক্রিপ্টটি গ্রহণের ( PR টি ডিসকোশনের অন্যান্য উদাহরণ ) পরীক্ষা করবে যখন এই সমস্যার সৃষ্টি শুরু করে :

if [ "$SOME_VAR" == "yes" ];
then
  echo "Variable SOME_VAR is activated"
else
  echo "Variable SOME_VAR is NOT activated"
fi

এবং আপনার রচনা ফাইলটিতে সেট করা

environment:
  SOME_VAR: yes

পরিণাম ডেকে আনবে SOME_VARহচ্ছে Trueযখন স্ক্রিপ্ট রান অত: পর ভুল কেস গ্রহণ যেমন নয় সমান yes

সুতরাং আপনি যখন ওয়াইএএমএল বিধি সম্পর্কে অবগত নন তখন অবাঞ্ছিত আচরণগুলি ডিবাগ করা শক্ত প্রতিরোধ করার জন্য বুলিয়ানকে অস্বীকার করার জন্য পছন্দ করা হয়েছে

আমি সমস্যাটি কাটিয়ে উঠতে দুটি উপায় দেখতে পাচ্ছি:

  1. env_fileপরিবর্তে ব্যবহার করে, তারা আইআইআরসি পার্স করা হয়নি এবং রূপান্তরটি রোধ করা উচিত।

  2. আপনি ইতিমধ্যে বলেছিলেন, অ্যাপ্লিকেশন চালু করার আগে মানটি সংজ্ঞায়িত করার পরিবর্তে আপনার লঞ্চারের চারপাশে একটি মোড়ক স্ক্রিপ্ট ব্যবহার করুন, এর লাইনের পাশাপাশি কিছু করা উচিত:

    AUTOAPPLY=false
    if [ "$SOME_VAR" == "true" ]
    then
        AUTOAPPLY=true
    fi
    
    ./target/universal/stage/bin/APPNAME -Dplay.evolutions.db.default.autoApply=$AUTOAPPLY
    

9

ওটাই হ'ল এটি trueএকটি বুলিয়ান হিসাবে ব্যাখ্যা করে । এনভার্স অবশ্যই স্ট্রিং হওয়া উচিত, সুতরাং কোটগুলির মাধ্যমে প্রকারটি স্পষ্ট করে তোলা প্রয়োজন।

Https://www.json2yaml.com/ দিয়ে এটি পরীক্ষা করে দেখুন


আরও সাধারণভাবে, উদ্ধৃতিগুলি মানটিতে প্রদর্শিত হবে না কারণ এগুলি YAML ফর্ম্যাটিং।
কোডরেঞ্জার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.