একক মডিউলের জন্য আপডেটড্র্যাশ


28

ড্রাশের মাধ্যমে কি কোনও একক মডিউলের আপডেট ফাংশন সম্পাদন করা সম্ভব? আমি দেখতে পাচ্ছি drush updatedbযা কোন মডিউল নামটি আর্গুমেন্ট হিসাবে গ্রহণ করে না এবং সমস্ত উপলব্ধ আপডেটগুলি চালায়। তারপরে drush pm-updateনতুন ফাইলগুলির জন্য যাচাই করা আছে। ডকুমেন্টেশন বলেছেন:

(পিএম-আপডেটকোড + আপডেট বি এর সমান)

এর অর্থ কি যদি আমি drush pm-updateপ্রত্যেকটি উপলভ্য (নতুন আপডেট_ফাংশন প্রস্থান করে) আপডেট চালিত হয়ে যাই? একমাত্র মডিউল আপডেট করার (ডিবি) উপায় আছে কি?


আমি জানি এই প্রশ্নটি বেশ পুরানো, তবে আমি কৌতূহলী: আপনি এটি কেন চান? সাধারণত, সমস্ত কোড ডিবিটি আপ-টু-ডেট। আপনি যদি কোনও নির্দিষ্ট মডিউলটির ডিবি আপডেটটি চালাতে না চান, আপনি কি পুরো মডিউলটিকে পূর্ববর্তী সংস্করণে ফিরিয়ে আনবেন না?
মারকভানজেন্ড

1
এক বছর পর. নিম্নলিখিত বিষয়গুলির জন্য আমার এটির প্রয়োজন ছিল: আমি একটি কাস্টম মডিউল তৈরি করেছি, তবে পরে টেবিলের বিন্যাসটি পরিবর্তন করেছি (এখনও উন্নয়নের পর্যায়ে), সুতরাং এটি নতুন স্কিমা দিয়ে কেবল ডিবি আপডেট করতে সুবিধাজনক হবে।
মার্টেন হার্টম্যান

উত্তর:


10

না, আপনি পারবেন না।

আপনি যদি প্রতিটি মডিউল তাদের নিজস্ব আপডেট করতে চান তবে কেবলমাত্র একটি একক মডিউলের ফাইলগুলি আপডেট করুন এবং তারপরে আপডেটবিডি চালান।


ব্যবহার সম্পর্কে নীচের মন্তব্য দেখুন drush dl(আপনি সম্ভবত পুরানো মডিউলটি মুছতে চান তাই নতুন সংস্করণের জন্য নয় এমন পুরানো ফাইলগুলি আপনার চারপাশে রাখবেন না!)
ডাবলজোশ

ড্রাশের বাইরে এটি করার কোনও উপায় আছে?
lathomas64

2
@ অহমসৌজী সঠিক উত্তরটি দিয়েছেন
সাইবারক্যাম্পবেল

21

ড্রাশ 5.7 এ আপনি কমান্ডটি চালাতে পারেন drush pm-update --no-core module-name। ড্রাশ স্বয়ংক্রিয়ভাবে বর্তমান মডিউলটিকে ব্যাকআপ করবে, নতুন সংস্করণ ডাউনলোড করবে এবং আপনাকে ডাটাবেস আপডেট করার অনুরোধ জানাবে।


6
এটি আপনার আপডেট করা মডিউলের কেবল নয়, সমস্ত মুলতুবি থাকা আপডেটগুলি চালাবে।
মোশি ওয়েটজম্যান

মোশ, স্পষ্ট করে বলতে পারি? আমি উপরের কমান্ডটি চালাচ্ছি এবং যদিও ড্রশ সমস্ত বিচারাধীন আপডেটগুলি পরীক্ষা করবে, কেবলমাত্র নির্দিষ্ট মডিউলটি (উপরে মডিউল-নাম) আপডেট করা হবে। আমি কিছু অনুপস্থিত করছি?
আহিমসৌজি

6
এটি সমস্ত মুলতুবি কোড আপডেটগুলি পরীক্ষা করে এবং নির্দিষ্ট মডিউলের জন্য কোডটি আপডেট করে তবে এটি সমস্ত ডাটাবেস আপডেটগুলি প্রক্রিয়া করবে ।
meustrus

8

আপনি যদি কেবল একটি আপডেট চালাতে চান তবে আপনি চালাতে পারেন drush eval foo_update_33(), উদাহরণস্বরূপ। অনুশীলনে, এটি আপনার চেয়ে কিছুটা জটিল কারণ আপনার ইনস্টল ফাইলটি লোড করতে হবে তবে বেশি নয় but

আপনি @ ম্যাকালিয়া সমাধানটিও দেখতে পারেন:

drush php-eval 'module_load_install('my_module');my_module_update_7XXX();'


3
আমি যুক্ত করব যে কেউ ড্রশের জন্য আ কন্ট্রিবিউশন বর্ধন করে যা আপনাকে নির্বাচিত আপডেটগুলি চালাতে দেয় যদি দুর্দান্ত হয়। এটি সাধারণভাবে করা নিরাপদ জিনিস নয় তবে কখনও কখনও আপনি বিপজ্জনকভাবে বাঁচতে চান। কোর ড্রাশের জন্য উপযুক্ত নয় যদিও (আমি ড্রশ রক্ষণাবেক্ষণকারী)
মোশি ওয়েটজম্যান

2
কোর ড্রাশের জন্য উপযুক্ত নয় কেন? এটি কি সম্ভব নয় যে কেউ ডাটাবেস আপডেটের একটি নির্দিষ্ট ক্রম (ইতিমধ্যে ডাউনলোড করা কোডের জন্য) প্রয়োগ করতে চান , সেই ক্ষেত্রে প্রতিটি পৃথক মডিউল পৃথকভাবে আপডেট করা প্রয়োজন? আমি নিজেও এমন পরিস্থিতিতে আছি।
meustrus

33 এখান থেকে আসছেন কোথায়? মডিউলটির মেশিনের নাম কি ফু?
lathomas64

33 টি আপডেট ফাংশনটির নামের অংশ এবং ক্রমটি নির্ধারণ করে। এবং হ্যাঁ, foo মডিউলটির মেশিনের নাম। আপনি foo.install এ ফাংশনগুলি খুঁজে পেতে পারেন। উদাহরণস্বরূপ, ডিভেল মডিউলটির (ডিভেল ইন্ডিস্টলে) বেশ কয়েকটি আপডেট ফাংশন রয়েছে: function devel_update_7000সর্বনিম্ন সংখ্যার সাথে এক এটি প্রথমে কার্যকর করা হবে function devel_update_7001, ইত্যাদি ইত্যাদি
উরসুলা

3
এখানে একটি উদাহরণ যা ইনস্টল ফাইলটি প্রথমে লোড করে:drush php-eval 'module_load_install('file_entity');file_entity_update_7211();'
ম্যাকালেa

5

তন্ন তন্ন drush up someproject, কিংবা drush upc someprojectশুধুমাত্র আপডেট করার জন্য মনে মনে someprojectমডিউল। আপনি যা চান তার একটি ভিন্ন উপায় হ'ল:

drush dl someproject #use --select option to be prompted for a module version
                     #this will overwrite your exising module's files
                     #backup your modules files with --backup, yourself, use a VCS to revert
drush updb           #run available database update scripts

এখানে ড্রুপাল.আরজে একটি অনুরূপ বিষয় নিয়ে আলোচনা করা হচ্ছে। যত্ন নিবেন !


আমি কেবল চেষ্টা করেছি, এবং drush up someprojectকাজ করছি, তবে দুর্ভাগ্যক্রমে এটি ডিফল্টরূপে সক্ষম মডিউলগুলির জন্য সমস্ত উপলব্ধ আপডেটগুলি পরীক্ষা করে (যার প্রয়োজন হবে না), তাদের কয়েকটিকে "আপডেট উপলব্ধ" লিখেছে , তবে কেবলমাত্র নির্দিষ্ট প্রকল্পটি আপডেট করে। এখানে একটি স্ক্রিনশট রয়েছে: i.imgur.com/TDDmB.png । আপনি দেখতে পাচ্ছেন, একাধিক আপডেট উপলভ্য, তবে কেবল xmlsitemap ব্যবহার করে আপডেট হয় drush up xmlsitemap
Sk8erPeter

4

আমি ড্রশ 5.9 ব্যবহার করছি, এবং এই আদেশ দ্বারা সফলভাবে একটি একক মডিউল আপডেট করতে পারি:

drush dl *project*

সুতরাং, উদাহরণস্বরূপ, 'ডেভেল' মডিউলটি আপডেট করতে:

drush up devel

1

আমি বিশ্বাস করি যে ড্রাশের মাধ্যমে এটি এখন সম্ভব হয়েছে up:

drush up module_name

0

আমার একটি পরিস্থিতি ছিল যেখানে একটি আপডেট ফাংশন দ্বারা একটি টেবিল তৈরি হয়েছিল ( MYMODULE_update_7101), তবে সেই টেবিলটি কোডে অ্যাক্সেস করা যাচ্ছিল কোথাও প্রতিটি ক্যাশে পরিষ্কার এবং প্রায় প্রতিটি ড্রাশ কল (এটি মূলত সমস্ত মেনুগুলির জন্য সত্তার ধরণের নাম পেয়েছিল এবং যাই হোক না কেন) অন্য)। রানিং প্রথমটির পরিবর্তে তৃতীয়ভাবে drush updatedbচলছিল MYMODULE_update_7101

আমি @ মাকালেয়া এবং @ মোশে ওয়েটজম্যানের দ্বারা চালিত পরামর্শের সমাধানটি চেষ্টা করেছি:

drush php-eval 'module_load_install('MYMODULE');MYMODULE_update_7101();'

দৌড়ানোর আগে drush updatedb, তবে এটি কোনও উপকারে আসেনি - ড্রশ রান ব্যর্থ হয়েছিল কারণ updatedbআবার চালানোর চেষ্টা করে MYMODULE_update_7101()এবং এড়িয়ে গিয়ে ভুল করে বলেছে যে টেবিলটি ইতিমধ্যে বিদ্যমান রয়েছে। মূলত, উপরের কোডটি আপডেটটি চালিয়েছিল, তবে আপডেটটি যে পদ্ধতিতে চালিত হয়েছিল তা সিস্টেমে তার চিহ্ন রেখে যায় নি। সম্ভবত update.phpডিবিতে মডিউলটির জন্য সর্বশেষতম সংস্করণ নম্বর সংরক্ষণের জন্য প্রতিটি আপডেট চালানোর পরে অন্যান্য সামগ্রীর পুরো গুচ্ছটি করতে হয় Pres

আমি update.phpদেখতে পেলাম কীভাবে এটি প্রতিটি আপডেট ফাংশনটি চালায় এবং এটি কী করে, কল করার জন্য একটি ফাংশন সন্ধান করছে যা আপডেট ফাংশনটি কল করবে এবং অন্যান্য সমস্ত স্টাফও করবে। আমি এখানে পৌঁছে শেষ:

include_once DRUPAL_ROOT . "/includes/update.inc";
$c["results"]["#abort"] = array();
update_do_one("MYMODULE", 7101, array(), $c);

যা আমি আসলে ড্রাশ নিয়ে ছুটে এসেছি:

drush eval 'include_once DRUPAL_ROOT . "/includes/update.inc"; $c["results"]["#abort"] = array(); update_do_one("MYMODULE", 7101, array(), $c);'

এটি আপডেটটি চালিয়েছে, কোনও সমস্যা নেই, তবে আমার দৌড়ানোর সময় মাইমডুডল সংস্করণ 7101 এখনও আপডেট তালিকায় প্রদর্শিত হয়েছিল updatedb, তবুও এটি ত্রুটিযুক্ত না হয়ে দৌড়েছিল এবং সাইটের পরিদর্শনটিতে সবকিছু ভাল দেখাচ্ছে।

কিছুটা হ্যাকি এবং 6 বছর দেরীতে, তবে ভাল কি শেষ হয়?

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