/ / Arangodb में पृष्ठभूमि कार्यों में बाहरी फ़ंक्शन कैसे कॉल करें - आरंगोडब

आरंगोडब में पृष्ठभूमि कार्यों में बाहरी फ़ंक्शन कैसे कॉल करें - आरंगोडब

मेरे पास पूरी तरह से काम करने की एक कार्यक्षमता है और मैं इसे पृष्ठभूमि कार्य से हर 30 मिनट पर कॉल करना चाहता हूं। लेकिन यह "अपरिभाषित" के रूप में त्रुटि को कॉल और फेंक नहीं रहा है।

function hourly() { require("console"); console.log("I am running");}

controller.get("/testOnce", function(req, res) {
var tasks = require("org/arangodb/tasks");

tasks.register({
id : "Test",
name : "Testing background task",
period : 5,
command : "hourly()"
});
});

मैंने एक अलग js में प्रति घंटा परिभाषित करने की कोशिश की और फिर "आवश्यकता" के साथ फोन किया, लेकिन यह फेंकता मॉड्यूल "myjob" का पता नहीं लगा सकता

myjob.js

कार्य प्रति घंटा () {आवश्यकता ("कंसोल"); कंसोल.लॉग ("मैं चल रहा हूं");

app.js

controller.get("/testOnce", function(req, res) {
var tasks = require("org/arangodb/tasks");

tasks.register({
id : "Test",
name : "Testing background task",
period : 5,
command : "var job = require("myjob");"
});

});

उत्तर:

जवाब के लिए 5 № 1

की सामग्री command विशेषता अन्य स्कोप में परिभाषित चर का संदर्भ नहीं दे सकती है। उदाहरण के लिए, में app.js वेरिएंट आप एक चर नाम का उपयोग कर रहे हैं hourly जब कमांड निष्पादित नहीं होती है, तो वह उपस्थित नहीं हो सकता है।

कुछ लॉगिंग के साधारण मामले में, app.js वैरिएंट को काम किया जा सकता है अगर इसके command पैरामीटर को निम्नलिखित में बदल दिया जाता है (जो जीता "टी किसी भी चर की आवश्यकता होती है):"

var tasks = require("org/arangodb/tasks");
tasks.register({
period : 5,
command : "require("console").log("I am running from inline command");"
});

वह वेरिएंट जो एक अलग फ़ाइल में काम फ़ंक्शन को परिभाषित करता है (नाम दिया गया है myjob.js) उस मॉड्यूल के निर्यात के माध्यम से फ़ंक्शन को उपलब्ध कराकर काम किया जा सकता है:

function hourly() {
require("console").log("I am running from myjob.js");
}

exports.hourly = hourly;

ऐसा इसलिए है क्योंकि require() केवल वही निर्यात करेगा जो मॉड्यूल निर्यात करता है। उपरोक्त मामले में मॉड्यूल नाम के एक फ़ंक्शन को उजागर करेगा hourly, जो अब एक पृष्ठभूमि कार्य से निम्नानुसार लागू किया जा सकता है:

var tasks = require("org/arangodb/tasks");
tasks.register({
period : 5,
command : "require("myjob").hourly();"
});

कृपया ध्यान दें कि इसके लिए काम करने के लिए, फ़ाइल myjob.js मॉड्यूल खोज पथ में स्थित होना चाहिए। IIRC जो है js/node डिफ़ॉल्ट रूप से। यह भी ध्यान दें कि इस निर्देशिका में पहले से ही बंडल मॉड्यूल शामिल हैं और ArangoDB अपडेट पर बदल सकते हैं।

यदि नियमित कमांड से निष्पादित किया जाना हैफॉक्सक्स मार्ग के भीतर, फिर फॉक्सक्स कतारों का उपयोग करना भी एक विकल्प हो सकता है क्योंकि उन्हें आवेदन निर्देशिका के अंदर काम के कार्य के साथ स्क्रिप्ट डालने की अनुमति देनी चाहिए। हालाँकि, मैंने अभी तक यह कोशिश नहीं की है।


जवाब के लिए 2 № 2

इसे हल करने का "फॉक्सएक्स तरीका" कतार और एक स्क्रिप्ट-आधारित नौकरी (2.6 में शुरू) का उपयोग करेगा।

मैंने इसे इसमें शामिल किया है अंतिम फॉक्सक्स वेबिनार और एक ब्लॉग पोस्ट और कुकबुक रेसिपी पर काम कर रहा हूँ।

इस तरह से करने में समस्या यह है कि फॉक्सएक्सनौकरियां 2.6 में आवधिक नहीं हो सकती हैं। यह सुविधा 2.7 के लिए बनाई गई है, लेकिन केवल 2.6 रिलीज होने के साथ, आप शायद "किसी भी समय जल्द ही इसका उपयोग करने में सक्षम होंगे।"

व्यक्तिगत रूप से मैं एक बाहरी अनुसूचक का उपयोग करने की सिफारिश करूंगा और वहां से फॉक्सक्स स्क्रिप्ट (फॉक्सएक्स-मैनेजर सीएलआई या एचटीटीपी एपीआई के माध्यम से) का उपयोग करूंगा।