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


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.