ড্রশ সত্তা-আপডেটের উদ্দেশ্য কী?


14

ড্রুপাল 8 মডিউল আপডেট করার পরে, ড্রুপাল 8 স্ট্যাটাস পৃষ্ঠায় আমাকে সতর্ক করা হয়েছে যে:

সত্তা / ক্ষেত্রের সংজ্ঞা: সত্তার ধরণ এবং ক্ষেত্রের সংজ্ঞাগুলিতে নিম্নলিখিত পরিবর্তনগুলি সনাক্ত করা হয়েছিল।

গুগল গুজব রটানোর পরে, মনে হয় এটির সমাধানটি চালানো drush entity-updates। তবে আমি এটি কিছুটা অদ্ভুত বলে মনে করি কারণ এটি অন্য আদেশ বলে মনে হয় যে ডাটাবেস আপডেট করার পরে কারও কারও প্রবাহে মনে রাখা বা সংহত করা দরকার, এটি উল্লেখ করার দরকার নেই যে কীভাবে মূল সতর্কতাটি মোকাবেলা করতে হবে তা অবিলম্বে সুস্পষ্ট বলে মনে হয় নি।

আরও কী, এটি প্রায়শই এমন হয় যে বিকাশে আপনার স্থিতি পাতায় থাকা অন্যান্য ক্রিয়াকলাপের জন্য একটি সতর্কতা থাকবে যার অর্থ আপনার যদি এই পদক্ষেপের দরকার হয় তা অবিলম্বে আপনি জানতে পারবেন না।

এই সতর্কতাটি কিসের জন্য - বা বরং, ডি 8 এর মধ্যে কেন এই বৈশিষ্ট্যটি প্রবর্তিত হয়েছে এবং কেন এটি ডাটাবেস আপডেট অপারেশনে সংঘটিত হয় না, তবে তাকে আলাদাভাবে চালানো উচিত তাও কেউ ব্যাখ্যা করতে পারেন?

উত্তর:


19

drush entity-updatesএকটি বিকাশকারী সরঞ্জাম। আপনি যদি নিজের কাস্টম মডিউলে সত্তা / ক্ষেত্রের সংজ্ঞা পরিবর্তন করেন আপনি দ্রুত এটিকে প্রয়োগ করতে পারেন।

উত্পাদনে এটি হওয়া উচিত নয়। আপনি যদি অফিসিয়াল রিলিজের মধ্যে কোনও মডিউল আপডেট করেন তবে মডিউলের আপডেট কোডটি এটি পরিচালনা করতে হবে।

তবে আপনার ক্ষেত্রে আপনি উল্লেখ করছেন যে আপনার সাইটটি বিকাশে রয়েছে। সুতরাং এখানে অনেক কিছুই রয়েছে, যা এটির কারণ হতে পারে। হয় আপনার নিজের কোডে বা অবদানকারী মডিউলগুলির ডেভ বা আলফা সংস্করণে।

সত্ত্বা স্কিমা আপডেটের জন্য অটোমেশন সরানো (যেখানে আরও উদাহরণ রয়েছে) এর সিআর লিখিত আপডেট ফাংশনগুলি থেকে আমি এই উদাহরণটি পেয়েছি :

/**
 * Add 'revision_translation_affected' field to 'node' entities.
 */
function node_update_8001() {
  // Install the definition that this field had in
  // \Drupal\node\Entity\Node::baseFieldDefinitions()
  // at the time that this update function was written. If/when code is
  // deployed that changes that definition, the corresponding module must
  // implement an update function that invokes
  // \Drupal::entityDefinitionUpdateManager()->updateFieldStorageDefinition()
  // with the new definition.
  $storage_definition = BaseFieldDefinition::create('boolean')
      ->setLabel(t('Revision translation affected'))
      ->setDescription(t('Indicates if the last edit of a translation belongs to current revision.'))
      ->setReadOnly(TRUE)
      ->setRevisionable(TRUE)
      ->setTranslatable(TRUE);

  \Drupal::entityDefinitionUpdateManager()
    ->installFieldStorageDefinition('revision_translation_affected', 'node', 'node', $storage_definition);
}

2
এটি বাদে আসলে একটি খারাপ উদাহরণ। আপনি যদি মডিউল হন তবে আপনার খুব নির্দিষ্ট আপডেট করা উচিত। একটি নতুন ক্ষেত্র সংজ্ঞা ইনস্টল করুন, সত্তার ধরণের সংজ্ঞাটি আপডেট করুন। আপনি যদি একাধিক মডিউল আপডেট করেন বা মডিউলটি ভবিষ্যতে অন্য পরিবর্তন করে এবং আপনি কোনও পুরানো সংস্করণ থেকে আপডেট করেন তবে এটি খুব খারাপভাবে যেতে পারে। node.install এর আরও বেশ কয়েকটি উন্নত আপডেটের উদাহরণ রয়েছে।
বারদির

1
প্রাথমিকভাবে, এটি আপডেটব / আপডেট.এফপি এর অংশ হিসাবে স্বয়ংক্রিয়ভাবে সম্পন্ন হয়েছিল। তবে এটি সর্বদা কার্যকর হয় না, যখন ডেটা থাকে এবং এটি প্রচুর সমস্যার সৃষ্টি করে তখন এটি সম্ভবত ধ্বংসাত্মক আপডেটগুলিকে সমর্থন করে না। আপনার যদি কোনও ক্ষেত্রে ডেটা থাকে, আপনি কেবল এই পদ্ধতিটি কল করতে পারবেন না, আপনার নিজের এটি আপডেট করতে হবে, যা বেশ জটিল হতে পারে। দেখুন drupal.org/node/2554097 আরও তথ্যের জন্য
Berdir

2
বারদিরের মন্তব্য সম্পর্কে দ্রষ্টব্য: আমি খারাপ উদাহরণটি সরিয়েছি এবং পরিবর্তনের রেকর্ড থেকে এটির সাথে প্রতিস্থাপন করেছি।
অ্যান্ডি

2
কেবল স্পষ্ট করে বলতে গেলে, উত্পাদনে সত্তা-আপডেটগুলি চালানোর জন্য এটি একটি খারাপ ধারণা কারণ এটি ধ্বংসাত্মক হতে পারে। উদাহরণস্বরূপ, আপনি যদি কোনও ফিল্ড স্টোরেজ uuid পরিবর্তন করেন, পরিবর্তিত স্টোরেজ সংজ্ঞাটি আমদানি করুন, ক্রোন চালান, এবং তারপরে সত্তা-আপডেটগুলি চালান, এটি সেই ক্ষেত্রে থাকা যে কোনও বিদ্যমান সামগ্রীকে ধ্বংস করবে।
ডেন পাওয়েল

2
মডিউলগুলি লক্ষ্যযুক্ত আপডেট হুকের মাধ্যমে তাদের নিজস্ব স্কিমা আপডেটগুলি প্রয়োগ করার জন্য দায়বদ্ধ হতে হবে। কেউ চলমান হওয়া উচিত entity-updates, নিয়মিত কমান্ড কাস্টম মডিউল যেখানে আপনি ডাটা ধ্বংস যত্ন সম্পর্কে না দিয়ে সাইট উন্নয়ন প্রক্রিয়া শুরুর দিকে ছাড়া।
ডেন পাওয়েল

1

কমান্ড "ড্রশ সত্তা-আপডেটগুলি" v 8.7.0 থেকে সরানো হয়েছে

Https://www.drupal.org/node/3034742 দেখুন

8.7.0 দিয়ে শুরু করে, ড্রুপাল কোর আর স্বয়ংক্রিয় সত্তা আপডেটগুলির জন্য সমর্থন সরবরাহ করে না। যখনই কোনও সত্তার ধরণ বা ফিল্ড স্টোরেজ সংজ্ঞা তৈরি করতে, পরিবর্তন করতে বা মুছে ফেলার প্রয়োজন হয়, এটি আপডেট এপিআই দ্বারা সরবরাহিত স্পষ্ট আপডেট ফাংশন দিয়ে এবং সত্তা সংজ্ঞা আপডেট ম্যানেজার দ্বারা সরবরাহিত এপিআই ব্যবহার করে করতে হবে।

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