একটি মডিউল এর hook_update_n স্থিতি পুনরায় তৈরি করা


14

আমি আগে লিখেছি এমন একটি মডিউল প্রসারিত করছি এবং এর জন্য কিছু স্কিমা পরিবর্তন দরকার যা আমি প্রয়োগ করি hook_update_N

আমি থেকে মডিউল এর সংস্করণ আপডেট করেছি 7.x-1.0করতে 7.x-1.1এবং বাস্তবায়িত foo_update_7100এবং এটি কাজ করে জরিমানা।

সমস্যাটি হ'ল আমি ভিতরে ভুল করে ফেলেছি foo_update_7100এবং এখনই আমি ঠিক করেছি যে আমি 00১০০ আপডেটটি পুনরায় চালু করতে পারি না। আমাকে একটি 7101 তৈরি করতে হবে তবে এটির কোনও অর্থ নেই কারণ আমার সমস্ত পরিবর্তনগুলি এখনও প্রতিশ্রুতিবদ্ধ নয়।

আমি এর মাধ্যমে হুক_আপডেট_ন এর স্থিতি পুনঃসেট করার চেষ্টা করেছি:

update system set schema_version=-1 where name='foo';

> Query OK, 1 row affected (0.01 sec)
> Rows matched: 1  Changed: 1  Warnings: 0

তারপরে আমি করি drush cc allতবে drush updatedb -yতবুও আমাকে "কোনও ডাটাবেস আপডেটের প্রয়োজন নেই" দেয়।

hook_update_Nসংখ্যাটি বাড়ানোর পরিবর্তে আমি কীভাবে এটি সমাধান করতে পারি ?


1
এটি -1 এর পরিবর্তে 0 এ সেট করার চেষ্টা করুন।
অ্যান্ডি

ধন্যবাদ। কাজ করেছে। আমার কলামের বিবরণটি দেখা উচিত ছিল যা স্পষ্টভাবে উল্লেখ করেছে যে -1মডিউলটি ইনস্টল করা নেই। উত্তর হিসাবে পোস্ট করতে নির্দ্বিধায় যাতে আমি গ্রহণ করতে পারি।
চেরোভিম

উত্তর:


14

এটি 0 তে সেট করার কাজ করা উচিত। system_schema()মান হওয়া উচিত বলে:

-1 মডিউল ইনস্টল না করা থাকলে (এর টেবিলের অস্তিত্ব নেই); 0 বা মডিউলটির hook_update_N () ফাংশনের বৃহত্তম এন যা মডিউলটি প্রথম ইনস্টল হওয়ার পরে চালিত বা অস্তিত্ব ছিল।


1
আসলে, এটি কেবল তখনই কাজ করবে যদি এটি একমাত্র আপডেট হুক; সাধারণত, এর ফলে সমস্ত আপডেট হুক আবার চালিত হবে। আপনাকে পুনরায় চালিত হওয়া আপডেট হুকের সংখ্যার নীচে 1 মান নির্ধারণ করা আরও নিরাপদ (এবং পরবর্তী সংখ্যাগুলির সাথে যে কোনও হুকও চলবে)।
ইয়েলকে ব্লক

একটি কারণ এটা কি -1একটি মডিউল জন্য দেখাতে হবে বলে যে Drupal এর হয় সক্রিয়?
সিডমো

6

এফওয়াইআই, ড্রুপাল 8-এ, সিস্টেম টেবিলটি সরানো হয়েছে, এবং এই তথ্যটি এখন কী_ভ্যালু সারণীতে সংরক্ষণ করা হয়েছে ।

UPDATE key_value SET value='i:8000;' WHERE collection = 'system.schema' AND name = 'module_name';

(উপরে উল্লিখিত হিসাবে, আসল মান হুক_আপডেট_ এন () এর চেয়ে কম হওয়া উচিত যা আপনি পুনরাবৃত্তি করতে চান, তবে শেষ আপডেটের চেয়ে বেশি বা মেলাতে যা পুনরাবৃত্তি করার দরকার নেই))


3

আমি এটি এতটাই করেছিলাম যে আমি সিস্টেম টেবিলের আপডেট সংস্করণটি আবার রোল করতে ড্রশ মডিউলটি লিখে শেষ করেছি। আপডেট রোলব্যাকের জন্য "urol" বলে।

https://github.com/danshumaker/drush-uroll

ব্যবহার: ড্রাশ ইউরোল - মডুল = মাইকাস্টমমডিউল - রূপান্তর = 5

এটি অত্যন্ত সহজ তবে আমি এটি সর্বদা ব্যবহার করি। এটি একটি ডাটাবেস ব্যাকআপ পুনরায় লোড স্ক্রিপ্টের সাথে মিলিত আপনাকে আপডেট ফাংশনগুলি লেখার সময় ধুয়ে ফেলতে এবং পুনরাবৃত্তি করতে দেয়।

আশা করি আপনাদের পক্ষে সহায়ক। শুভকামনা।


অসাধারণ! ড্রুপাল 7 নাকি দ্রুপাল 8?
ইগনাসিও সেগুরা পোস্টটিগো

1
কেবলমাত্র এখন জন্য ডি 7।
ড্যান শুমাকার

এটি একটি ভাল। আমাকে সাহায্য করে ছিল. কেবলমাত্র স্পষ্টতার জন্য যদি আমার হুক_আপডেট_ এন মাইমডিউল_আপডেট_7০০ এর মতো হয় তবে আপনার ড্রাশ ইউরোল কমান্ডে আমি সংস্করণটি ০. রাখতে পারি? আমি কি ঠিক আছি?
অস্টিন

1
@ কমল দুঃখিত আমি এটি আরও ভাল নথি করা উচিত। যদি বর্তমান হুক আপনার লিখনের হুক_আপডেট_এন 7300 এ থাকে তবে আপনি ইউরোলটি দেবেন --module=mymodule --version=7299 যা আপনার আগে এক সিস টেবিলে সেট করে। এভাবে পরের ডিবিআপে আপনার 7300 রান হয়ে যায়। সুতরাং, না, কেবল এটি শেষ দুটি সংখ্যাটি দেবেন না তবে পুরো সংখ্যাটি mymodule_update_যা 9123667 হতে পারে অতীতে .. :) @ ইলকেরও উত্তরে একটি ভাল বর্ণনা রয়েছে।
ড্যান শুমাকার

0

আপনার আপডেট হুকটি আবার চালানোর জন্য, আপনার হুকের ক্রম সংখ্যার নীচে স্কিমা_ভার্সনটি 1 এ সেট করা উচিত ।

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

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


0

যে কেউ এখনও উত্তর খুঁজছেন তার পক্ষে আপনি এটি 3 উপায়ে অর্জন করতে পারেন:

  • এসকিউএল: আপডেট সিস্টেম এসটি স্কিমা_ভার্সন = [এন *] যেখানে নাম = '[মডিউলটির নাম]';

  • ড্রাশ: ড্রশ এভ "ড্রুপাল_সেট_ইনস্টল_স্কেমা_ভার্সন ('[মডিউলটির নাম]' ', [এন *])"

  • ড্রল ইউরল ড্রাশ ইউরোল - মডুল = [মডিউলের নাম] - রূপান্তর = এন *

* এন আপনি যে ফর্মটি ফিরিয়ে আনতে চান তা আপডেট ফাংশন (অর্থাৎ শেষ সফল আপডেট ফাংশন)

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