কিভাবে রেজিস্ট্রি টেবিল পুনর্নির্মাণ?


9

registryঅন্যান্য সমস্যার কারণে আমি টেবিলটি কেটে ফেলেছি , তবে এখন registryডাটাবেসে তালিকাভুক্ত ফাইলগুলির ভিত্তিতে আমার সারণীটি পুনর্নির্মাণ করতে সমস্যা হচ্ছে have

আমি ফোন করছি registry_update(), _registry_update()বা registry_rebuild()এটি করতে:

drush eval "registry_rebuild();"

তবে তারপরে আমি নিম্নলিখিত ত্রুটিটি উপস্থিত হয়েছি:

মারাত্মক ত্রুটি: ক্লাস 'সিলেক্টকোওয়ারি এক্সটেন্ডার' পাওয়া যায় নি লাইন 15 এ / পেজ.আর.সি.কে অন্তর্ভুক্ত

ডিফল্টরূপে ( systemমডিউল ইনস্টলে) registryটেবিলটি খালি, সুতরাং দ্রুপাল কীভাবে সঠিক ডিফল্ট ডেটা দিয়ে সেই টেবিলটি পূরণ করে?

উত্তর:


15

এটি করার একেবারে সহজ উপায় হ'ল যে কোনও মডিউল সক্ষম করা, এটি আপনার পক্ষে এটি করবে। অবশ্যই, যদি আপনার রেজিস্ট্রিটি পুনর্নির্মাণের প্রয়োজন হয় তবে সাধারণত ইউআই কথা বলা অনুপলব্ধ drush en [modulename]হতে পারে তবে আপনার যা প্রয়োজন তা হতে পারে।

যদি এটি পর্যাপ্ত না হয় তবে রেজিস্ট্রি পুনর্নির্মাণ এটিকে পুনরায় নির্মাণের ক্ষেত্রে তুচ্ছভাবে সহজ করে তোলে। এটি করার সবচেয়ে সহজ উপায় হ'ল এটি কোনও ড্রশ এক্সটেনশান হিসাবে ইনস্টল করা।

এক্সটেনশনটি ইনস্টল করুন এবং চালান drush rr

মডিউল পৃষ্ঠায় বিশদ ইনস্টলেশন সংক্রান্ত নির্দেশাবলী রয়েছে এবং এটি প্রয়োজনে ড্রশ ছাড়াই কীভাবে চালানো যায় তাও দেখায়।


9

এটি দ্রুপাল পুনরায় ইনস্টল করে বা আপনার ভাঙা দৃষ্টান্তে দ্রুপালের আদর্শভাবে নতুন ইনস্টলেশন থেকে টেবিলটি অনুলিপি করে স্থির করা যেতে পারে।

অথবা আপনি নিম্নলিখিত কাজের মতো চেষ্টা করতে পারেন (কেবলমাত্র এটি করুন যখন আপনার ড্রুপাল উদাহরণটি ইতিমধ্যে ভেঙে গেছে):

  1. পুরানো রেজিস্ট্রি টেবিলটিকে প্রথমে ব্যাকআপ দিন (কেবলমাত্র ক্ষেত্রে):

    drush sqlq "CREATE TABLE registry_bak LIKE registry; INSERT INTO registry_bak SELECT * FROM registry;"
    drush sqlq "CREATE TABLE system_bak LIKE system; INSERT INTO system_bak SELECT * FROM system;"
    
  2. বুটস্ট্র্যাপ ক্যাশে এবং রেজিস্ট্রি টেবিল সাফ করুন।

    drush sqlq "TRUNCATE cache_bootstrap; TRUNCATE registry"
  3. রেজিস্ট্রি টেবিলের মধ্যে প্রাথমিক তথ্য সন্নিবেশ করান:

    drush sqlq 'INSERT INTO registry (name, type, filename) VALUES ("SelectQueryExtender", "class", "includes/database/select.inc"), ("DrupalDefaultEntityController", "class", "includes/entity.inc");'
    drush eval "registry_update();"
    
  4. ক্যাশেগুলি সাফ করুন:

    drush -y cc all
  5. যদি 4. এ ক্লিয়ার ক্যাশে ব্যর্থ হয়, অন্য কিছু অনুপস্থিত শ্রেণীর কারণে, আপনি হয় করতে পারেন:

    ক) অনুপস্থিত শ্রেণিগুলি ম্যানুয়ালি যুক্ত করুন, উদাহরণস্বরূপ:

    $ drush -y cc all
    Fatal error: Class 'Entity' not found in profile2.module on line 593
    $ grep -Rwl "^class Entity" .
    ./sites/all/modules/entity/includes/entity.inc
    $ drush sqlq 'INSERT INTO registry (name, type, filename) VALUES ("Entity", "class", "sites/all/modules/entity/includes/entity.inc");'
    $ drush -y cc all # testing...
    # If Fatal error:, repeat 5a. again.
    

    বা:

    খ) এই ব্যর্থ অবদান মডিউলগুলি (যেমন প্রোফাইল 2, বিধি) অক্ষম করার চেষ্টা করুন:

    drush sqlq 'UPDATE system SET status = 0 WHERE name = "failing_module"'

    এবং 4 থেকে শুরু হওয়া পদক্ষেপগুলি পুনরাবৃত্তি করুন।

  6. যদি কিছু তার চেয়ে বেশি ভাঙা হয় তবে আপনি আপনার টেবিলগুলি মূল বিন্দুতে পুনরুদ্ধার করতে পারেন (যা ১ ধাপে সম্পন্ন হয়েছিল):

    drush sqlq "TRUNCATE registry; INSERT INTO registry SELECT * FROM registry_bak;"
    drush sqlq "TRUNCATE system; INSERT INTO system SELECT * FROM system_bak;"
    

    এবং আবার চেষ্টা করো.

আরও দেখুন: / সাইট / সমস্ত / মডিউল / * থেকে / সাইটগুলি / সমস্ত / অবদান / মডিউল / * এ ইনস্টল করা মডিউলগুলি কীভাবে স্থানান্তরিত করতে হয়


registryনিচের স্ক্রিপ্টটি দ্রুপাল ওয়েবরুটে চালিত হয়ে পুনর্নির্মাণ টেবিলটিও অর্জন করা যেতে পারে:

grep -ERo "^(\s+)?(abstract )?class (\S+)" . | tr ':' ' ' | sed "s/abstract //g" | awk '{print "INSERT INTO registry (filename, type, name) VALUES (\x27"$1"\x27,\x27"$2"\x27,\x27"$3"\x27);"}' | $(drush sql-connect) -f

রেজেক্সে মাইকের সহায়তার জন্য ধন্যবাদ ।


4
thx - পদক্ষেপ 3 drush rrব্যর্থ হয়েছে যেখানে আমাকে রক্ষা করেছে
এরিকবিএসচুলজ 1:48
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.