কীভাবে হুক_পস্ট_আপডেটের পুনরায় চালু করবেন ()


11

মডিউল আপডেট করার জন্য ড্রুপাল 8 চালু হয়েছেhook_post_update_NAME() যার কিছু সুবিধা রয়েছেhook_update_n ।

প্রত্যেকের hook_post_update_NAME()কেবল একবার চালানো উচিত তবে কখনও কখনও আমি এটি আবার চালাতে চাই, যেমন আমি যখন বিকাশের সময় আপডেট হুকটি ডিবাগ করি। এর সাথে hook_update_n, আপনি ডাটাবেজে স্কিমা সংস্করণটি পুনরায় সেট করতে পারেন ।

আপনি কিভাবে পুনরায় কাজ করবেন hook_post_update_NAME()?

উত্তর:


11

"পোস্ট_আপডেট" হুকগুলি যা চালানো হয়েছে তা ডাটাবেসে, key_valueটেবিল, post_updateসংগ্রহের মধ্যে সংরক্ষণ করা হয় তবে সরাসরি আপডেট করার জন্য ডেটা সিরিয়ালযুক্ত এবং বিশ্রী হয়।

আমি @ কিমলালুনোর জবাব থেকে কিছু বিবরণ ব্যবহার করে একটি ড্রাশ স্ক্রিপ্ট তৈরি করতে যা আপনি একটি একক হুক পুনরায় সেট করতে ব্যবহার করতে পারেন। এখানে একটি প্রাথমিক সংস্করণ ( দীর্ঘ সংস্করণ এখানে ):

#!/usr/bin/env drush

$key_value = \Drupal::keyValue('post_update');
$update_list = $key_value->get('existing_updates');

$choice = drush_choice($update_list, dt('Which post_update hook do you want to reset?'));

if ($choice) {
  $removed_el = $update_list[$choice];
  unset($update_list[$choice]);
  $key_value->set('existing_updates', $update_list);
  drush_print("$removed_el was reset");
} else {
  drush_print("Reset was cancelled");
}

এবং আপনি কমান্ড লাইন থেকে এটি চালানোর সময় দেখতে কেমন লাগে তার একটি উদাহরণ এখানে রয়েছে:

./scripts/reset_hook_post_update_NAME.drush

Which post_update hook do you want to reset?
 [0]   :  Cancel
 [1]   :  system_post_update_add_region_to_entity_displays
 [2]   :  system_post_update_hashes_clear_cache
 [3]   :  system_post_update_recalculate_configuration_entity_dependencies
 [4]   :  system_post_update_timestamp_plugins
 [5]   :  my_module_post_update_example_hook

# The script pauses for user input. 
5 

my_module_post_update_example_hook was reset

3
আপনি কি ড্রিথ, গিথুব . com/ drush- ops/ drush এ পিছনে অবদান সম্পর্কে চিন্তাভাবনা করেছেন ?
— Powpow12

1
এটি একটি দুর্দান্ত মিষ্টি বৈশিষ্ট্য, তবে এটি कोर ড্রাশের জন্য কিছুটা কুলুঙ্গি। সম্ভবত কেউ এর জন্য একটি কমান্ডফিল তৈরি করে।
— মোশি ওয়েটজম্যান

3

এখানে আপনি উদাহরণস্বরূপ কমান্ড লাইন থেকে ড্রাশ পিএইচপি-ইভাল সহ ব্যবহার করতে পারেন:

drush php-eval -e '$update_hook_name = "<my_hook_post_update_name>";
$key_value = \Drupal::keyValue('post_update');
$existing_updates = $key_value->get('existing_updates');
$index = array_search($update_hook_name,$existing_updates); 
unset($existing_updates[$index]);
$key_value->set('existing_updates', $existing_updates);'

আপনি যখন ড্রাশ আপডেটডবি পুনরায় রান করবেন তখন আপনি আপনার পোস্ট_আপডেট_হুকটি চালানোর জন্য অপেক্ষা করতে দেখবেন।


এটি আমার পক্ষে ভালভাবে কাজ করেছে, কেবলমাত্র 9 এ ড্র্যাশকে উল্লেখ করার জন্য, এটি হলdrush php:eval 'command'
— পাওয়ারপো 12

খুব কার্যকর, যদি কেবলমাত্র পঠনযোগ্য পরিবেশে। অনেক ধন্যবাদ;)
— মিরসোফট

1

UpdateRegistry::getPendingUpdateFunctions()নিম্নলিখিত কোড রয়েছে। মন্তব্য কি বলে দেখুন।

  // First figure out which hook_{$this->updateType}_NAME got executed
  // already.
  $existing_update_functions = $this->keyValue->get('existing_updates', []);

আপডেটরেজিস্ট্রি :: $ আপডেট টাইপ সেট করা আছে 'post_update'। এর মান দিয়ে
$this->keyValueসেট করা আছে ।UpdateRegistryFactory::create()$this->container->get('keyvalue')->get('post_update')

সেই মূল মূল্য সংগ্রহের সমতুল্য পদ্ধতিগত কোডটি নিম্নলিখিত একটি।

$key_value = \Drupal::keyValue('post_update');

বিদ্যমান_আপডেটসকে খালি অ্যারেতে সেট করুন , এবং দ্রুপাল ভাবেন যে পোস্টের কোনও আপডেট কলব্যাক কল করা হয়নি।

$key_value = \Drupal::keyValue('post_update');
$key_value->set('existing_updates', []);

সেই মূলমূল্যের বিদ্যমান_আপডেটস কী থেকে কলব্যাক নামটি সরিয়ে ফেলুন, এবং দ্রুপাল ভাবেন যে পোস্ট আপডেট কলব্যাকটি এখনও চালু হয়নি।


0

এটিকে ভেতর থেকে কল করুন hook_update_n()এবং তারপরে আপনি আগে যা করছিলেন তা করুন।


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