সক্রিয় কনফিগারেশন থেকে আমি কীভাবে কোনও কনফিগারেশন অবজেক্টটি সরিয়ে ফেলব?


41

আমি ড্রুপাল ৮ এর জন্য একটি কাস্টম মডিউল লিখছি It এটি মডিউল / মাইমোড / কনফিগার / ইনস্টল / ফিল্ড.স্টোরেজ.ব্লোম_সটেম.সিব্লিট_ভিটার_এক.আইএমএল নামে একটি ফাইলে একটি ফিল্ড স্টোরেজ কনফিগারেশন অবজেক্টকে সংজ্ঞায়িত করে।

সমস্যাটি হ'ল আমি মডিউলটি আনইনস্টল করার সময় এটি সরানো হয় না; এটি দৃশ্যত পিছনে ফেলে রাখা হয়েছে কারণ, যখন আমি মডিউলটি পুনরায় ইনস্টল করি, তখন আমি একটি ক্র্যাশ পাই।

drush -y pm-uninstall mymod
drush cr
drush -y en mymod

ব্যতিক্রম 'ড্রুপাল ore কোর \ কনফিগারেশন \ PreExistingConfigException' বার্তা সহ 'মায়োমড দ্বারা সরবরাহিত কনফিগারেশন অবজেক্টস (ফিল্ড। স্টোরেজ.ব্লুম_সটেম.স_স_ভিউ_সামগ্রী) ইতিমধ্যে সক্রিয় কনফিগারেশনে বিদ্যমান'

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


অনুরূপ সমস্যার মতো দেখায়: drupal.stackexchange.com/questions/173684/…
othermachines

ইস্যু ইনস্টল মডিউলটি এই সমস্যাটিকে সম্পূর্ণরূপে ঠিক করতে এবং এড়ানোর জন্য রয়েছে drupal.org/project/easy_install
কার্তিকেইন মণিবসাগাম

উত্তর:


53

এই মুহুর্তে এটি করার সহজতম উপায় হ'ল একটি ইন্টারেক্টিভ সেশন খোলার জন্য drush php(বা core-cli) ব্যবহার করা ।

তারপরে ব্যবহার করুন:

Drupal::configFactory()->getEditable('system.menu.devel')->delete();

এই কার্যকারিতাটি ড্রুপাল কনসোলেও যুক্ত করা হবে


1
এটি পুরোপুরি সমস্যার সমাধান করেছে। 'System.menu.devel'
এরিক স্টেইনবোন

একাধিক কনফিগার অপসারণ সম্পর্কে কী? যেমনmigrate_plus.migration.*
নিক

@ এটি সুন্দর নয়, তবে একাধিক মুছতে আপনার অন্যান্য প্রশ্নের আমার সমাধানটি দেখুন: drupal.stackexchange.com/questions/214132/…
CR47

আপনার যদি ডাটাবেসে সরাসরি অ্যাক্সেস থাকে তবে খুব সাবধানে configটেবিল থেকে আপত্তিজনক এন্ট্রি মুছুন ।
নাইদিম

30

ডিলিট কনফিগারেশন বস্তু Drush কমান্ড প্রয়োগ করুন: drush config-delete <config_name>


একাধিক সাইটের ক্ষেত্রেdrush -l your.site.domain config-delete <config_name>
muskie9

2
সংক্ষিপ্ত ফরম্যাটdrush cdel <config_name>
Sharique

সচেতন হোন, যদি আপনি কোনও drush crকনফিগার মুছে ফেলেন তবে কোনও ক্যাশেড কনফিগারেশন নির্ভরতা অপসারণ করার পরেও আপনার করা উচিত অন্যথায় আপনি এর মতো দেখতে কিছু পেতে পারেন:Error: Call to a member function getConfigDependencyKey() on null
উইলকো

13

আপনি নিম্নলিখিত পদ্ধতি ব্যবহার করতে পারেন। Hook_uninstall এ নিম্নলিখিত কোড ব্যবহার করুন

Drupal::configFactory()->reset('field.storage.bloom_stem.bs_twitter_ac');

অথবা

YML ফাইলে আপনি নির্ভরতাগুলি পছন্দ করতে পারেন


dependencies:
  module:
    - yourmodule
  enforced:
    module:
      - yourmodule

তারপরে ড্রুপাল এখানে স্বয়ংক্রিয়ভাবে বারডির বর্ণিত আপনার মডিউল আনইনস্টল করার সময় এই কনফিগারেশনগুলিকে সরিয়ে ফেলবে https://drupal.stackexchange.com/a/173879/10436


5
এটি ইদানীং পরিবর্তিত হতে পারে তবে এটি এখন কিছুটা আলাদা। নির্ভরতা: প্রয়োগ করা: মডিউল: - yourmodule
hw।

1
@ আপনার মন্তব্যটি অত্যন্ত গুরুত্বপূর্ণ। সম্ভব হলে প্রাসঙ্গিক পরিবর্তন রেকর্ডের একটি লিঙ্ক সহ এটি উত্তরে যুক্ত করার বিষয়টি বিবেচনা করুন। আমি এটি পাইনি।
rudolfbyker

গাহ !! আমি জানতাম এটি করার একটি উপায় আছে তবে আমি "বলপ্রয়োগ:" অংশটি মনে করতে পারি না। এটি করার সবচেয়ে সহজ এবং পরিষ্কার উপায়, বিশেষত yML ফাইলগুলিতে এগুলি তৈরি করার সময়।
আনসেটল্টিংট্রেন্ড

এই পদ্ধতির ব্যবহার করে এবং মডিউলটি ইনস্টল করার চেষ্টা করে, দ্রুপাল ত্রুটিটি ছুড়ে ফেলে: মডিউল কাস্টম_মডিউল সক্ষম করা যায় না কারণ এটি নিম্নলিখিত মডিউলগুলির উপর নির্ভর করে যা পাওয়া যায় নি:
জন

হাই জন, আপনি যদি এটি নির্ণয় না করেন তবে আপনার মডিউল নির্ভরতাটি ভুল জায়গায় রেখে দিয়েছে বলে মনে হচ্ছে। এই উত্তরে বর্ণিত কনফিগারেশনটি আপনার মডিউলটিতে কনফিগার / ইনস্টল ডিরেক্টরিতে ওয়াইএমএল ফাইল (গুলি) এ যাওয়ার উদ্দেশ্যে। ওপির ক্ষেত্রে এটি তার / তার কনফিগারেশন / ইনস্টল / ফিল্ড.স্টোরেজ.ব্লুম_সটেম.স_স_উত্তর_এক.আইএমএল ফাইলের মধ্যে থাকবে। মনে হচ্ছে এটির পরিবর্তে আপনি আপনার মডিউলের mymodule.info.yml ফাইলে নির্ভরতা রেখেছেন (এটি আপনার মডিউলটি ইনস্টল করতে সক্ষম হবে না)
ড্যানিয়েল স্কট

9

ড্রুপাল কনসোল ব্যবহার করে :

$ drupal config:delete 'the_config_to_delete'

1
দস্তাবেজগুলিতে: hechoendrupal.gitbooks.io/drupal-console/content/en/commands/… তবে এটি কি ওয়াইল্ডকার্ডস করতে পারে? যেমনdrupal config:delete 'migrate_plus.migration.*'
নিক

2
সর্বশেষতম ড্রুপাল কনসোলে কনফিগার: মুছে ফেলার আশা করে আপনি প্রথমে কনফিগার টাইপটি নির্দিষ্ট করে দিতে পারেন , উদাহরণস্বরূপ drupal config:delete active 'name'বা rup ড্রুপাল কনফিগারেশন: স্টেজিং 'নাম' মুছুন (কেবলমাত্র একটি প্যারামিটার সরবরাহ করা হয়েছে, এটি ধরে নিবে যে আপনি এটি টাইপ দিয়েছেন এবং আপনাকে প্রম্পট দেবে) কনফিগার নামের জন্য।)
উইলিয়াম তারেল

6

দ্রুপাল :: কনফিগারেশন () -> রিসেট () কনফিগার বস্তুটি মুছে না। এই রান জন্যDrupal::configFactory()->getEditable('field.storage.node.your_field_name')->delete()



2

সক্রিয় কনফিগারেশন মুছে ফেলার জন্য আপনি ড্রুপাল কনসোলটি ব্যবহার করতে পারেন drupal config:delete active config_to_delete


1

ড্রাশ কনফিগারেশন-তালিকা ব্যবহার করে তালিকাভুক্ত সমস্ত কনফিগারেশন সন্ধান করুন তারপরে আপনি যে কনফিগারেশনটি মুছতে চান তা সনাক্ত করুন। কনফিগারেশন ড্রাশ কনফিগারেশন-মুছতে মুছতে নীচের কমান্ডটি ব্যবহার করুন


0

আমি এখানে একটি ছোট (এখনও কিছুটা বেশি ইঞ্জিনিয়ারড) পাইথন স্ক্রিপ্ট রেখেছি যা কনফিগারেশনের অবশিষ্টাংশগুলি সরিয়ে দেয়। এটি নির্ভর করে drush config-delete

# 'batch_config_delete.py'
# 'drush' has to be available in the current directory

import os
import argparse
import subprocess

MODULES_ROOT = "/var/www/html/MYSITE/web/modules/custom"

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Batch config delete.")
    parser.add_argument("-m", "--module", required=True, help="Module name")
    args = parser.parse_args()
    install_path = os.path.join(MODULES_ROOT, args.module, 'config/install')

    for f in os.listdir(install_path):
        if f.endswith('.yml'):
            config_name = os.path.splitext(f)[0]
            print "Delete config:", config_name
            subprocess.call(['drush', 'config-delete', config_name])

এইভাবে মৃত্যুদণ্ড কার্যকর করা উচিত:

python ../scripts/batch_config_delete.py -m foobar

1
আপনি পিএইচপি বিকাশকারীদের একটি অজগর স্ক্রিপ্ট ব্যবহার করতে বলছেন? কিছুটা নির্বোধ মনে হচ্ছে।
প্যাট্রিক

0

ব্যবহারের সহজ ইনস্টল মডিউল এই কনফিগারেশন সমস্যা এড়ানোর জন্য, এই মডিউলের যখন একটি মডিউল আনইনস্টল, এটি কাজ করে এমনকি যদি একটি মডিউল এর configs রয়েছে না কনফিগারেশনের মুছতে অনুমতি দেবে জারি yml অথবা মধ্যে যোগ configs ঐচ্ছিক ফোল্ডার।

আনইনস্টলেশন চিত্রটিতে কনফিগারেশন


0

কাস্টম মডিউল থেকে অ্যাক্টিভ কনফিগারেশন আনইনস্টল করুন

আমি কাস্টম মডিউল থেকে কনফিগার ফাইল আনইনস্টল করার চেষ্টা করে একই সমস্যায় পড়েছি। আমি ওয়েবফর্মের জন্য কাস্টম কনফিগারেশন ফাইলগুলি পাস করার জন্য একটি কাস্টম মডিউল ব্যবহার করেছি। যেহেতু আমি নিখুঁত নই আমি মডিউলটি আনইনস্টল করতে, কোড সম্পাদনা করতে এবং পুনরায় ইনস্টল করতে সক্ষম হতে চাই। আমি খুঁজে পেলাম যে আমি কনফিগার / ইনস্টল yML ফাইলের নির্ভরতা / বলপ্রয়োগ বিভাগে আমার কাস্টম মডিউলটি (my_module) উল্লেখ করেছি, যখন আমি আমার মডিউলটি আনইনস্টল করি তখন কনফিগারেশন ফাইলগুলিও আনইনস্টল করা যায়।

   langcode: en
    status: true
    dependencies:
        enforced:
            module:
                - webform
                - my_module // reference your module here

0

এই সমস্ত উত্তরগুলি অন্তর্নিহিত কনফিগারেশন অবজেক্টটি সরাসরি মুছে ফেলার প্রস্তাব দেয় তবে সঠিক উপায় হ'ল সত্তা স্টোরেজ সিস্টেমের মাধ্যমে সত্তাটি মুছতে।

উদাহরণস্বরূপ, আপনার যদি আইডি "বৃহত" সহ কোনও চিত্র শৈলী থাকে এবং আপনি এটি মুছতে চান, আপনার এটি করা উচিত:

\Drupal::entityTypeManager()->getStorage('image_style')->load('large')->delete();

এটি এইভাবে করাতে, কনফিগারটি মোছার আগে কোর "পূর্বনির্মাণ" এবং কনফিগার মুছে ফেলার পরে "মুছুন" হুকগুলি আহ্বান করবে, যা অন্যান্য মডিউলগুলি বিভিন্ন সাফ আপ অপারেশন সম্পাদন করতে নির্ভর করতে পারে।


0

মডিউলটি আনইনস্টল করা হলে কনফিগারেশনটি সরাতে হুক_উনস্টল ব্যবহার করুন ।

তারপরে কনফিগারেশনটি মুছুন:

function hook_uninstall() {
  \Drupal::configFactory()->getEditable('the_setting.you.want.to.delete')->delete();
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.