আপনার মডিউলটির আপডেট হুকটি চালাতে বাধ্য করা কি সম্ভব?


18

আমি ডেট আইকল মডিউলটির লেখক এবং আমি যে নতুন প্রধান সংস্করণে (3.x) নিয়ে কাজ করছি তাদের জন্য 2.x ইনস্টল থাকা ব্যবহারকারীদের জন্য একটি দ্বি-অংশের স্কিমা আপডেট প্রয়োজন। আমি আপডেট হুক লিখেছি যা এই পরিবর্তনগুলি করে, তবে আমার ব্যবহারকারীদের মধ্যে যদি কোনও ডাটাবেস আপডেট স্ক্রিপ্টটি চালাতে ব্যর্থ হয়, তবে তারা তাদের আইকাল ফিড আমদানিকারকদের সম্পর্কিত একটি ত্রুটি বার্তা পাবে।

আপডেট স্ক্রিপ্টটি চালানো তাদের পক্ষে সঠিক সমাধান ... তবে তারা যদি বার্তাটি থেকে মুক্তি পেতে কেবল নিজের আমদানিকারককে ম্যানুয়ালি পরিবর্তন করে থাকে তবে তাদের আমদানিকারকরা স্থায়ীভাবে ভাঙা থাকবে (কারণ স্কিমা আপডেটের দ্বিতীয় অংশটি হ'ল না কার্যকর করা হয়েছে)।

সুতরাং যে ব্যবহারকারীরা আপডেটটি চালিয়েছেন তাদের কাছে কোনও বার্তা প্রদর্শন করার কোনও উপায় আছে? অথবা কোনওভাবে 3.x 2.x এর ওপরের উপরে ইনস্টল হয়ে গেলে প্রথমবার কোনও পৃষ্ঠার লোড হওয়ার সাথে সাথে আপডেট হুকটি জোর করে প্রয়োগ করুন?


2
আমি কল্পনা করব যে আপনি variable_set()আপনার আপডেট ফাংশনটিতে এমন একটি করতে পারবেন যা একটি পরিবর্তনশীল সেট করে যখন এটি সফলভাবে চালিত হয় যা আপনি একটি এর ভিতরে _preprocess_page()দেখতে পেতেন তবে আপনি প্রতিবার এটির দিকে তাকিয়ে থাকবেন যাতে নিশ্চিত না হয় পারফরম্যান্সটি বন্ধুত্বপূর্ণ হবে would
জিমাজাম্মা

উত্তর:


4

জিমাজম্মার মন্তব্যে প্রসারিত:

একটি variable_set()আপনার আপডেট ফাংশন যা একটি পরিবর্তনশীল সেট করে যখন এটি সফলভাবে যে আপনি একটি _preprocess_page ভিতরে তাকান পারে চালানো হয়েছিল ()

এবং প্রতিটি পৃষ্ঠায় এটির পরীক্ষার পরিবর্তে প্রশাসক অঞ্চল ব্রাউজ করা এবং ইনস্টল করা সংস্করণ যদি 3.0 হয় (3.1, 3.2, আপনি যদি আপগ্রেড পাথ হিসাবে পুরানো সংস্করণ সমর্থন করা বন্ধ করেন) তবে এটি পরীক্ষা করুন load

স্থিতি প্রতিবেদনের পৃষ্ঠায় প্রতিক্রিয়া জানাতে অতিরিক্তভাবে hook_requirements ব্যবহার করুন:

ইনস্টলেশন প্রয়োজনীয়তা পরীক্ষা করুন এবং স্থিতি প্রতিবেদন করুন।
(...)
'রানটাইম' পর্বটি খাঁটি ইনস্টলেশন প্রয়োজনীয়তার মধ্যে সীমাবদ্ধ নয় তবে রক্ষণাবেক্ষণের কাজগুলি এবং সুরক্ষা সম্পর্কিত সমস্যার মতো আরও সাধারণ স্থিতির তথ্যের জন্যও এটি ব্যবহার করা যেতে পারে।


15

মডিউল আপডেট জোর করার কয়েকটি উপায় রয়েছে।

  1. আপডেট ফাংশনটি সরাসরি কল করা হচ্ছে।

    $sandbox = [];
    module_load_include('install', 'FOO');
    FOO_update_7001($sandbox);
  2. আগ্রহের পয়েন্টে স্কিমা সংস্করণটিকে পুনরায় সেট করা এবং যথারীতি আপডেটগুলি আবার চালানো।

    drupal_set_installed_schema_version('module_name', '7000');

    বা কেবলমাত্র সর্বশেষ আপডেটের স্কিমাটি পুনরায় চালাতে পুনরায় সেট করুন:

    drupal_set_installed_schema_version('foo', drupal_get_installed_schema_version('foo') - 1);

    মন্তব্য:

    • এটি এতে স্থাপন করা যেতে পারে hook_install, সুতরাং আপডেট প্রক্রিয়া চলাকালীন সমস্ত পরবর্তী আপডেট হুকগুলি কার্যকর করা হবে।
    • ইনস্টলেশন ফাইলের বাইরে এই ফাংশনটি ব্যবহার করার জন্য, আপনাকে install.incমডিউলটির প্রথম ড্রপাল এবং ইনস্টলেশন ফাইল অন্তর্ভুক্ত করতে হবে, যেমন

      require_once DRUPAL_ROOT . '/includes/install.inc';
      module_load_include('install', 'foo');
    • ini_set('max_execution_time', 0);পিএইচপি সময়সীমা রোধ করতে দীর্ঘতর ইনস্টলেশন আপডেট যুক্ত করার কথা বিবেচনা করুন ।
  3. ব্যবহার drush। নীচে কয়েকটি উদাহরণ খুঁজুন:

    • drush eval 'module_load_include('install', 'foo'); $s = []; foo_update_7001($s);'
    • drush sqlq "UPDATE system SET schema_version = 7000 WHERE name = 'foo'" && drush -y updb

1
ওহ সুন্দর, আমি সম্পর্কে জানতাম না drupal_set_installed_schema_version()। এটি ডিবাগিং আপডেট হুকের জন্য দুর্দান্ত কাজে লাগবে!
coredumperror

1
সুতরাং এটিতে প্রবেশের মূল সমস্যাটি hook_install()দীর্ঘ ব্যাচযুক্ত (স্যান্ডবক্সযুক্ত) আপডেটগুলি চালানো running আদর্শ পরিস্থিতিতে, update.phpসময়সীমা রোধ করতে পিএইচপি থ্রেড পুনরায় চালু করার সাথে সাথে একইভাবে আপডেটগুলি ট্রিগার করার একটি উপায় থাকা উচিত । পিঁপড়া ধারণা কিভাবে এটি?
অ্যালেক্স স্ক্রাইপন্যিক

@ অ্যালেক্স.ডিজাইন ওয়ার্কস ini_set('max_execution_time', 0);আপডেটগুলি ট্রিগার করার আগে আপনি যুক্ত করতে পারেন ।
কেনোরব

1

(উত্তরে বর্ণিত)

কোনও আপডেট সম্পাদিত হয়েছে কিনা তা সনাক্ত করতে আপনি "স্কিমা_ রূপান্তর FROM সিস্টেম নির্বাচন করুন"। যদি তা না হয় তবে চালাতে অস্বীকার করুন (একটি ত্রুটির বার্তা সহ)।


দয়া করে আপনার উত্তরটির উচ্চারণ করুন এবং ব্যবহারের উদাহরণ দেওয়ার চেষ্টা করুন।
Елин Й.

এই মন্তব্য উপেক্ষা করুন।
coredumperror

আমি আশঙ্কা করি যে এটি কাজ করবে না, কারণ প্রশ্নে কার্যকারিতা অন্য মডিউলের জন্য একটি প্লাগইন এবং আমি সেই মডিউলটিকে তাদের আমদানিকারকদের সাথে ঝামেলা করতে বাধা দিতে পারি না।
coredumperror

আপনি যে মডিউলটির আপডেটের জন্য নিরীক্ষণ করতে চান তার স্কিমা সংস্করণটি পরীক্ষা করতে পারবেন না?
ব্যবহারকারী18099

0

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


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