এই ডাটাবেস.আইএমএল ফাইলটিতে &, <<, * এর অর্থ কী?


161

এখন অবধি আমি কেবলমাত্র প্রতিটি প্যারামিটারের সাথে ডাটাবেস.আইএমএল ব্যবহার করেছি যা স্পষ্টভাবে বলা হয়েছে, নীচের ফাইলটিতে এটি এমন কিছু অক্ষর ব্যবহার করেছে যা আমি বুঝতে পারি না। প্রতিটি লাইন এবং প্রতীক (&, *, <<) এর অর্থ কী, আমি এই ফাইলটি কীভাবে পড়ব?

development: &default
  adapter: postgresql
  database: dev_development

test: &test
  <<: *default
  database: test_test


cucumber:
  <<: *test

production:
  <<: *default
  database: test_production

6
YML ফাইলে আপনাকে সংযোগের প্যারামগুলি অনুরূপ থাকলে বিভিন্ন পরিবেশে ডাটাবেস সংযোগের পরামিতিগুলি পুনরায় লিখতে হবে না। এখানে উল্লিখিত ক্ষেত্রে, পরিবেশ শসা পরীক্ষার পরিবেশের মতো সঠিক সংযোগের প্যারাম ব্যবহার করে। এবং উত্পাদন পরিবেশ ডেটাবেস নাম বাদে বিকাশের মতো সংযোগের প্যারাম ব্যবহার করে। এটি DRY (নিজেকে পুনরাবৃত্তি করবেন না) কোডের মতো কিছু। দয়া করে আমাকে সংশোধন করুন
কেএক্সটাইজ

2
আরও দেখুন: yaml.org/type/
विसर्जना.

উত্তর:


191

&চিহ্ন নোড জন্য একটি alias (আপনার উদাহরণে &defaultalias লেখা হিসাবে "ডিফল্ট" গঠন নোড) এবং *রেফারেন্স নাম "ডিফল্ট" সঙ্গে বেনামে নোড। <<:যে নোড বিষয়বস্তু সন্নিবিষ্ট করে।

আমাকে এখানে ওয়াইএএমএল স্পেসটি উদ্ধৃত করার অনুমতি দিন:

পুনরাবৃত্তি নোডগুলি (অবজেক্টস) প্রথমে একটি অ্যাঙ্কর দ্বারা চিহ্নিত করা হয় (এম্পারস্যান্ডের সাথে চিহ্নিত - "এবং") এবং তারপরে অ্যালাইজড হয় (একটি নক্ষত্রের সাথে উল্লেখ করা হয় - "*") তারপরে।

সুতরাং আপনার উদাহরণ অংশ

development: &default
  adapter: postgresql
  database: dev_development

test: &test
  <<: *default
  database: test_test

আসলে প্রসারিত

development: &default
  adapter: postgresql
  database: dev_development

test: &test
  adapter: postgresql       # from the "default" alias
  database: test_test       # overridden by the duplicate key

এবং একই সাথে "পরীক্ষা" নোডের পাশাপাশি উপন্যাস "পরীক্ষা" এর অধীনে উপলব্ধ করুন।

কটাক্ষপাত আছে YAML স্পেসিফিকেশন - 2.2 কাঠামো আরও বিস্তারিত জানার জন্য (অথবা আপনি এমনকি ডক্স moar প্রয়োজন হলে ++,: 3.2.2.2 অ্যাঙ্কর এবং ওরফে। )


2
কৌতূহলী: "পরীক্ষা" পরীক্ষায় বিস্তৃত: & পরীক্ষা অ্যাডাপ্টার: "ডিফল্ট" ওরফে ডাটাবেস থেকে পোস্টগ্রেসকিএল: "ডিফল্ট" ওরফে ডেটাবেস থেকে ডেভ_ ডেভেলপমেন্ট # টেস্ট_স্টেস্ট সম্পূর্ণ নির্ভুল হতে। দ্বিতীয় "ডাটাবেস" "* ডিফল্ট" থেকে উল্লিখিত একটিকে ওভাররাইড করে?
গ্রিপ

2
@ গ্রিপ হ্যাঁ, ডাটাবেস কী <<: *defaultএটিকে ওভাররাইট করার পরে ঘোষণা করা হয়েছে । সঙ্গে YAML এটা উৎপন্ন{"development"=>{"adapter"=>"postgresql", "database"=>"dev_development"}, "test"=>{"adapter"=>"postgresql", "database"=>"test_test"}}
জনাব তাও

13

&default এর অর্থ আপনি পরে ব্যবহারের জন্য কিছু নামের সাথে এই বৈশিষ্ট্যের সেটটি লেবেলিং করছেন

<<: *default এর অর্থ আপনি ডিফল্ট হিসাবে লেবেলযুক্ত গ্রুপ থেকে সমস্ত বৈশিষ্ট্য অন্তর্ভুক্ত করছেন



3

এগুলি একই সেটিংসকে বারবার পুনরায় না করে পরিবেশের রেফারেন্সের এক উপায় (এটি শুকিয়ে নিন)।

test: &test
  <<: *default

&test এই নির্দিষ্ট সেটিংসে একটি রেফারেন্স তৈরি করে।

<<: *default পরীক্ষার জন্য ডিফল্ট সেটিংস ব্যবহার করুন বলে

cucumber:
  <<: *test

সুতরাং এখন আমরা জানি যে এর জন্য cucumberআমরা সেটিংসটি ব্যবহার করতে চাই test


2

সহজ কথায়, এই ধারণাটি বেস এবং উত্পন্ন শ্রেণীর সাথে সাদৃশ্যপূর্ণ।

বেস ক্লাসের টেমপ্লেটে, আপনি '&' এর সাথে সমস্ত সাধারণ বিবরণ উল্লেখ করেছেন যার অর্থ এই ক্ষেত্রগুলির প্রয়োজন অন্যান্য ইমেল বিভাগটি প্রসারিত করতে ব্যবহার করা যেতে পারে। এখন আপনি যখন এই 'বেস ক্লাস' টাইপ স্ট্রাকচারের কনফিগার মানগুলির সুপারসেট হিসাবে অন্য একটি বিভাগ তৈরি করেন, আপনি বেস শ্রেণীর অ্যাঙ্কর (অর্থাত্ '&' দিয়ে শুরু হওয়া) সহ '*' ব্যবহার করেন। আপনি 'বেস ক্লাস' বিভাগটি রাখার জন্য '<<:' ইয়ামল ধারণা হিসাবে ব্যবহার করেন, আপনি পরে ওভাররাইড করতে পারেন।

vsm:
  stub_nsx_mgr: &MGR_CTRL_STUB
    username: ADMIN
    password: $DEFAULT_PASSWORD
    deployment: ovf
    build: $PR_BUILD
    vmnics:
      - network: $MANAGEMENT_NETWORK_0
    vc: vc_0
    ovf_options:
      - --diskMode=$DISKMODE
      - --deploymentOption=$DEPLOYMENT_OPTION
$MGR_0:
    <<: *MGR_CTRL_STUB
    ovf_path_regex: 'appliance.*\.ovf'
    ovf_options:
      - --diskMode=$DISKMODE
      - --deploymentOption=$DEPLOYMENT_OPTION
$CTRL_0:
    <<: *MGR_CTRL_STUB
    ovf_options:
      - --diskMode=$DISKMODE
      - --allowExtraConfig
$CTRL_1:
    *MGR_CTRL_STUB

তবে, আপনি যদি বর্ধিত ক্ষেত্রগুলিকে ওভাররাইড করতে না চান তবে আপনি '<<:' এড়িয়ে যেতে পারেন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.