Drush स्क्रिप्टिंग? या बैच एपीआई?


8

हमारे पास एक Ubercart वेबसाइट है जो दैनिक आदेशों के बड़े संस्करणों को संभालती है, उन्हें संसाधित करती है और बिलिंग, वितरण मार्ग और भविष्य के निर्माण जैसे अन्य कार्यों को चलाती है।

इनमें से कुछ कार्य भारी होते हैं और कभी-कभी PHP को समय समाप्त कर देते हैं। क्या इन कार्यों को चलाने के लिए ड्रश या बैच एपीआई के माध्यम से बेहतर तरीका है?

गति आवश्यक रूप से प्राथमिकता नहीं है (हालांकि अच्छा है), लेकिन हम टाइमआउट से बचना चाहते हैं, जो कभी-कभी बिलिंग के साथ समस्याओं का कारण बन सकता है और दैनिक आदेशों को शेड्यूल कर सकता है।

क्या Drush स्क्रिप्ट बेहतर विकल्प है, या बैच API? क्या दोनों के बेहतर उपयोग के लिए कोई ट्यूटोरियल हैं?

जवाबों:


13

मैं बैच एपीआई का उपयोग करने का सुझाव नहीं दूंगा, बस इस तथ्य के लिए कि बैच संचालन ब्राउज़र से निर्भर करता है; यदि किसी भी कारण से ब्राउज़र क्रैश हो जाता है, या यह सर्वर से कनेक्शन खो देता है, तो बैच ऑपरेशन समाप्त नहीं होंगे, या (इससे भी बदतर) वे लटक जाएंगे। वास्तव में, PHP टाइमआउट से बचने के लिए, बैच ऑपरेशन ब्राउज़र को अंतराल पर बैच पेज को पिंग करने का कारण बनता है; यह तब होता है, जब भी जावास्क्रिप्ट कोड शामिल होता है, या नहीं (बाद के मामले में, Drupal ताज़ा मेटा टैग का उपयोग करता है)।

इन मामलों में, ड्रश शायद एक बेहतर विकल्प है; आप एक विशिष्ट मॉड्यूल बना सकते हैं जो विशिष्ट Drush कमांड को कार्यान्वित करता है, या डायरेक्ट्री में एक कमांड फ़ाइल जोड़ता है Drush अपने कमांड के लिए उपयोग करता है।


2
अतिरिक्त रूप से नशे के लिए आप एक ही समय में कई वस्तुओं को चलाने के लिए एक कतार का उपयोग कर सकते हैं।
डेनियल वीनर

2

इसके अलावा आप कस्टम PHP सीएलआई स्क्रिप्ट का उपयोग कर सकते हैं। यहाँ ड्रुपल 7 के लिए एक सरल उदाहरण दिया गया है:

#!/usr/bin/php
<?php
echo "Ubercart tasks\n===================\n";

$_SERVER['HTTP_HOST']       = 'default';
$_SERVER['PHP_SELF']        = '/index.php';
$_SERVER['REMOTE_ADDR']     = '127.0.0.1';
$_SERVER['SERVER_SOFTWARE'] = NULL;
$_SERVER['REQUEST_METHOD']  = 'GET';
$_SERVER['QUERY_STRING']    = '';
$_SERVER['PHP_SELF']        = $_SERVER['REQUEST_URI'] = '/';
$_SERVER['HTTP_USER_AGENT'] = 'console';

define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
//-------------------------------------------

// Place your code here

4
यहाँ मुद्दा यह है कि आप पहिए को फिर से लगा रहे हैं। ड्रश बेहतर विकल्प है क्योंकि यह पहले से ही इस तरह का काम करेगा और रूपरेखा पहले से ही है!
क्रिस कोहेन

1
मैं सभी सर्वरों पर ड्रश स्थापित करना पसंद नहीं करता जहाँ मैं कुछ करना चाहता हूँ।
येटेक

2
क्या कोई कारण है? यह किसी भी अन्य मॉड्यूल को स्थापित करने के रूप में गहन है।

मैं इसे कई बार कर रहा था और मुझे लगता है कि यह तरीका थोड़ा आसान है।
येटेक

1

मेरे पास एक डी 6 उबरकार्ट साइट है जिसे 'ऑटो-जनरेट डिजिटल उत्पादों' के लिए महत्वपूर्ण बैक-एंड प्रोसेसिंग की आवश्यकता है। मैं इसे संभालता हूं:

  1. इन कस्टम डिजिटल उत्पादों में से एक की खरीद के कारण 'उन उत्पादों के लिए डीबी तालिका प्रविष्टि होती है जिन्हें संकलित करने की आवश्यकता होती है।' उस db प्रविष्टि में 'स्थिति' फ़ील्ड है।
  2. पृष्ठभूमि में चलने वाले Drupal के भीतर BASH स्क्रिप्ट शुरू की जाती है। यह स्क्रिप्ट aware री-एंट्रेंट ’है, जिसका अर्थ है कि इसे चलाने के दौरान आह्वान किए जाने के बारे में पता है और नए कार्य को किसी भी मौजूदा कार्य में जोड़ा जाना है।
  3. यह BASH स्क्रिप्ट ड्रुपल डेटाबेस में 'स्टेटस' क्षेत्र को बढ़ाती है क्योंकि एक कस्टम डिजिटल उत्पाद बनाया जाता है, और अंत में उपयोगकर्ता को उनके पूर्ण कस्टम उत्पाद के डाउनलोड लिंक के साथ एक ईमेल नोटिस भेजा जाता है।

यह कुछ हद तक Xio द्वारा प्रस्तावित एक समान समाधान है, इस अपवाद के साथ कि यह एक PHP सीएलआई स्क्रिप्ट का उपयोग नहीं करता है, लेकिन पृष्ठभूमि में चलाने के लिए ड्रुपल में PHP द्वारा आमंत्रित BASH स्क्रिप्ट। वे BASH स्क्रिप्ट ड्रुपल डेटाबेस तक पहुँचते हैं और किसी भी उत्पाद के 'स्टेटस' मूल्यों को आगे बढ़ाते हैं जिसे वह ग्राहकों को भेज रहा है और भेज रहा है। साथ ही, द्रुपाल इन स्थिति मूल्यों को देखने और उन कस्टरों को वापस रिपोर्ट करने में सक्षम है, जहां 'कस्टम निर्माण प्रक्रिया' में उनकी खरीदारी फिलहाल होती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.