मैं CakePHP (1.2) का उपयोग करने के कुछ महीने पहले कंपनी के आवेदन करने के लिए छोटे सुविधाओं को जोड़ने के लिए शुरू कर दिया और मैं इसके साथ बहुत परिचित नहीं हूँ।CakePHP क्रॉन जॉब एक नियंत्रक की कार्रवाई कॉल करने के लिए
हम उत्पादन सर्वर पर विलय करने से पहले स्थानीय स्तर पर विकास सर्वर पर परीक्षण करते हैं।
मैं एक नियंत्रक कार्रवाई मैं क्या मेरे शोध, एक क्रॉन जॉब के माध्यम से यह करने के लिए सबसे अच्छा तरीका माना के साथ हर घंटे के नाम से जाना चाहते हैं।
प्रयास 1
इन पढ़ने के बाद,
http://book.cakephp.org/1.2/en/view/110/Creating-Shells-Tasks
मैं त्रुटियों के बिना कुछ को लागू सकता है, लेकिन कार्रवाई निष्पादित नहीं है।
इन उदाहरणों के आधार पर, मैं अपने ऐप निर्देशिका (नहीं एप्लिकेशन/webroot) में एक फ़ाइल का नाम cron_dispatcher.php जोड़ा और फिर ऐप्स dir
php cron_dispatcher.php/नियंत्रक/कार्रवाई से इस आदेश किया था/param
अभी भी कुछ भी नहीं हुआ है, लेकिन जब मैं इसे यूआरएल के माध्यम से कॉल करता हूं तो यह सही काम करता है।
प्रयास 2
मैं एक खोल (email.php) कि/ऐप्स/विक्रेताओं/गोले में कार्रवाई/कहेंगे बनाने की कोशिश की।
<?php
class EmailShell extends Shell {
public function main() {
$this->out('Test');
}
}
?>
यह सफलतापूर्वक कंसोल
केक ईमेल मुख्य
का उपयोग करने में टेस्ट आउटपुट लेकिन फिर मैं कैसे नियंत्रक की कार्रवाई कॉल करने के लिए नहीं मिल रही है। मैंने
$ यह-> अनुरोध क्रिया ('/ नियंत्रक/क्रिया') की कोशिश की है;
मैंने खोल में मुख्य की तुलना में एक अलग फ़ंक्शन से कॉल करने का भी प्रयास किया है।
मैं $ में नियंत्रक शामिल करने के लिए कोशिश की है के रूप में मैं एक मॉडल के साथ होता है, लेकिन वह काम नहीं किया है (और यह समझ में मुझे लगता है कि नहीं है)
मैं एक बनाने नहीं लगता कि चर का उपयोग करता है कार्य समाधान है या तो मैं sendEmails फ़ंक्शन को डुप्लिकेट नहीं करना चाहता हूं इसलिए मैं नियंत्रक की कार्रवाई को केवल एक खोल या जो कुछ भी कहने के लिए कह रहा हूं!
वहाँ शायद कुछ सिद्धांत मैं याद कर रहा हूँ है, धन्यवाद
समाधान
मैं एक मॉडल के लिए नियंत्रक से कुछ तरीकों में ले जाया गया और मैं उन्हें एक खोल से फोन कर रहा था।
App::import('Component', 'Email');
class SendMemosShell extends Shell {
var $uses = array(
'Memo',
);
public function main() {
}
public function sendEmails() {
$this->Email =& new EmailComponent(null);
$memoList = $this->Memo->getMemos();
//...
}
}
यह लिंक http://book.cakephp.org/2.0/en/console-and-shells/cron-jobs.html
मदद की संपादित करें: जानकारी के कुछ स्पष्ट किया और समाधान
मुझे इस क्रिया को मैन्युअल रूप से कॉल करने में सक्षम होना चाहिए (उदाहरण के लिए दृश्य में एक बटन पर क्लिक करके)। क्या आप सुझाव देते हैं कि मैं नियंत्रक कार्रवाई के बजाय एक कार्य बनाउंगा और इसके बजाय इसे कॉल करूँगा (स्वचालित रूप से क्रॉन नौकरी के साथ और मैन्युअल रूप से क्लिक पर)? क्या एक खोल है जिसे आप पूरी तरह से तर्क से अलग करते हैं या आप कतार के बारे में बात कर रहे थे? कभी-कभी मुझे एक साथ कई ईमेल भेजने की आवश्यकता होती है (जब इसे स्वचालित रूप से चेक किया जाता है) लेकिन यह अक्सर नहीं होना चाहिए, इसलिए मुझे आश्चर्य है कि कतार मेरी आवश्यकताओं के लिए थोड़ा जटिल है या नहीं! आपके उत्तर – Catherine
के लिए धन्यवाद, उन्हें उत्तर दिया, सामान्य रूप से आपको अपने ऐप के आकार और उसके डिज़ाइन के बारे में सोचना चाहिए। जिस तरह से मैंने आपके प्रश्न का उत्तर दिया है, वैसे ही इसे किया जाना चाहिए। इसका मतलब यह नहीं है कि यह वही तरीका है जो व्यवसाय के लिए अच्छा है। यदि आप कभी-कभी मेल भेजते हैं तो इसके लिए एक पूर्ण और अधिक जटिल सेटअप बनाने के लिए शायद लायक नहीं है। –
हाय फिर से, आपके विस्तृत उत्तर के लिए धन्यवाद। हम इस बात पर सहमत हुए कि ईमेल को मैन्युअल रूप से भेजने की कोई आवश्यकता नहीं थी इसलिए मैंने एक खोल बनाया जो ईमेल भेजता है। इसने मुझे नियंत्रक से मॉडल में और अधिक तरीकों को स्थानांतरित करने के लिए मजबूर किया जो कि अगर मैं अच्छी तरह समझ गया तो अधिक उचित है। मैंने क्रॉन नौकरी स्थापित करने के लिए इस प्रक्रिया का पालन किया: http://book.cakephp.org/2.0/en/console-and-shells/cron-jobs.html मैंने कतारों का उपयोग न करने का फैसला किया, भले ही यह दिलचस्प लग रहा था क्योंकि यह इस मामले में इसके लायक नहीं था! – Catherine