22

पर फायरबेस के लिए क्लाउड फ़ंक्शंस का परीक्षण कैसे करें आज फायरबेस ने अपने ब्रांड के नए उत्पाद Cloud Functions for Firebase जारी किए और मैंने अभी एक हैलो वर्ल्ड फ़ंक्शन बनाया और इसे अपने मौजूदा फायरबेस परियोजना पर तैनात किया।पीसी

ऐसा लगता है कि यह सभी निर्भरताओं को बंडल करता है और इसे aws lambda function करता है जैसे फ़ायरबेस पर अपलोड करता है। लेकिन कोड में मामूली बदलावों पर भी ऐसा करने में बहुत अधिक समय लगता है और इंटरनेट की अच्छी कनेक्टिविटी की भी आवश्यकता होती है। अगर आप किसी कारण से ऑफ़लाइन हैं, तो आप अंधेरे में हैं कि आप कौन सी कोड लिख रहे हैं जब तक कि आपके पास अपनी स्थानीय मशीन पर ऑफ़लाइन फ़ंक्शन निष्पादित करने और परीक्षण करने का कोई तरीका न हो।

क्या फ़ायरबेस स्थानीय स्तर पर क्लाउड फ़ंक्शंस का परीक्षण करने का कोई तरीका है?

उत्तर

16

यहाँ

अभी तक नहीं firebaser। क्लाउड फ़ंक्शंस emulator है लेकिन वर्तमान में यह फ़ायरबेस एसडीके का उपयोग करके लिखे गए कार्यों का समर्थन नहीं करता है। स्थानीय एमुलेटर समर्थन हमारी सूची के शीर्ष पर है और हमारे पास जल्द ही कुछ होगा।

+1

कोई अपडेट? धन्यवाद। –

+3

https कार्यों के लिए अल्फा संस्करण फ़ायरबेस एमुलेटर उपलब्ध: https://firebase.google।कॉम/डॉक्स/फ़ंक्शंस/लोकल-एमुलेटर –

21

firebaser यहाँ

अपने कार्य की तैनाती वास्तव में मैं क्या सामान्य रूप से के लिए इंतजार करने को तैयार हूँ की तुलना में अधिक समय लगता है। हम इसे सुधारने के लिए कड़ी मेहनत कर रहे हैं और (जैसा कि ब्रेंडन ने कहा) स्थानीय एमुलेटर पर काम कर रहे हैं।

लेकिन इस पल के लिए, मैं ज्यादातर अपने वास्तविक व्यापार तर्क को पहले एक अलग नोड स्क्रिप्ट में लिखता हूं। इस तरह से मैं node speech.js के साथ स्थानीय कमांड प्रॉम्प्ट से इसका परीक्षण कर सकता हूं। एक बार जब मैं संतुष्ट हूं कि फ़ंक्शन काम करता है, तो मैं इसे अपनी वास्तविक फ़ंक्शन फ़ाइल में कॉपी/पेस्ट करता हूं या (बेहतर) speech मॉड्यूल को अपनी फ़ंक्शंस फ़ाइल में आयात करता हूं और इसे वहां से आमंत्रित करता हूं।

एक संक्षिप्त उदाहरण है कि मैं जल्दी खोद गया था जब मैं क्लाउड विजन एपीआई का उपयोग करके टेक्स्ट निष्कर्षण तारों में था। मुझे लगता है कि होता है एक फ़ाइल ocr.js कहा जाता है:

var fetch = require('node-fetch'); 

function extract_text(url, gcloud_authorization) { 
    console.log('extract_text from image '+url+' with authorization '+gcloud_authorization); 

    return fetch(url).then(function(res) { 
    return res.buffer(); 
    }).then(function(buffer) { 
    return fetch('https://vision.googleapis.com/v1/images:annotate?key='+gcloud_authorization, { 
     method: "POST", 
     headers: { 
     "Content-Type": "application/json" 
     }, 
     body: JSON.stringify({ 
     "requests":[ 
      { 
      "image":{ 
       "content": buffer.toString('base64') 
      }, 
      "features":[ 
       { 
       "type":"TEXT_DETECTION", 
       "maxResults":1 
       } 
      ] 
      } 
     ] 
     }) 
    }); 
    }).then(function(res) { 
    var json = res.json(); 
    if (res.status >= 200 && res.status < 300) { 
     return json; 
    } else { 
     return json.then(Promise.reject.bind(Promise)); 
    } 
    }).then(function(json) { 
    if (json.responses && json.responses.length && json.responses[0].error) { 
     return Promise.reject(json.responses[0].error); 
    } 
    return json.responses[0].textAnnotations[0].description; 
    }); 
} 

if (process.argv.length > 2) { 
    // by passing the image URL and gcloud access token, you can test this module 
    process.argv.forEach(a => console.log(a)); 
    extract_text(
    process.argv[2], // image URL 
    process.argv[3] // gcloud access token or API key 
).then(function(description) { 
    console.log(description); 
    }).catch(function(error) { 
    console.error(error); 
    }); 
} 

exports.extract_text = extract_text; 

और फिर मेरे कार्य index.js में, मेरे पास है:

var functions = require('firebase-functions'); 
var fetch = require('node-fetch'); 
var ocr = require('./ocr.js'); 

exports.ocr = functions.database().path('/messages/{room}/{id}').onWrite(function(event) { 
    console.log('OCR triggered for /messages/'+event.params.room+'/'+event.params.id); 

    if (!event.data || !event.data.exists()) return; 
    if (event.data.ocr) return; 
    if (event.data.val().text.indexOf("https://firebasestorage.googleapis.com/") !== 0) return; // only OCR images 

    console.log(JSON.stringify(functions.env)); 

    return ocr.extract_text(event.data.val().text, functions.env.googlecloud.apikey).then(function(text) { 
    return event.data.adminRef.update({ ocr: text }); 
    }); 
}); 

तो तुम यह पिछले फ़ाइल देख सकते हैं के रूप में वास्तव में है तारों के बारे में "कार्यकर्ता विधि" ocr.extract_text डेटाबेस स्थान पर।

नोट यह कुछ समय पहले एक परियोजना है, इसलिए कुछ वाक्यविन्यास (अधिकतर functions.env भाग) थोड़ा बदल सकता है।

+0

क्या आप कृपया किसी भी उदाहरण को कार्रवाई में साझा कर सकते हैं, या कम से कम किसी भी रेपो को संदर्भित कर सकते हैं ** हैलो वर्ल्ड प्रोग्राम ** जिसमें आप अपने उत्तर में वर्णन कर रहे हैं –

+0

परीक्षण में अभ्यास कैसे कार्य करता है? आपने बताया कि आप कमांड लाइन पर 'node speech.js' चलाते हैं। लेकिन यह आपके प्रोग्राम के परिचालन तर्क का सही परीक्षण नहीं करता है? यह केवल "सेटअप" (यानी, वाक्यविन्यास, निर्भरता, आदि) का परीक्षण करता है, मैं अनुमान लगा रहा हूं? यदि यह सही है, तो स्थानीय स्तर पर परिचालन तर्क का परीक्षण करने का कोई तरीका है? – Mowzer

+0

मैं उन मानों में गुजरता हूं जिन्हें जीसीपी कमांड लाइन से चाहिए। तो यह बाहरी स्क्रिप्ट के साथ मेरी स्क्रिप्ट और इसकी बातचीत का परीक्षण करता है। क्लाउड फ़ंक्शंस में डेटा होने पर यह वास्तविक प्रवाह का परीक्षण नहीं करता है। –

1

यहाँ उत्तर दिया: https://github.com/firebase/firebase-functions/issues/4#issuecomment-286515989

Google मेघ भी कार्य एक स्थानीय एमुलेटर मुक्त-स्रोत बना है, और हम Firebase के लिए बादल कार्य के साथ एक तंग एकीकरण के निर्माण के लिए काम कर रहे हैं। इस बीच, आप इसे यहां देख सकते हैं: https://github.com/GoogleCloudPlatform/cloud-functions-emulator/

एमुलेटर आपको स्थानीय रूप से फ़ंक्शंस चलाने की अनुमति देता है।यहाँ प्रलेखन बताते हैं कि यह कैसे उपयोग करने के लिए है: https://cloud.google.com/functions/docs/emulator

7

भागो कार्य स्थानीय स्तर पर

https://firebase.google.com/docs/functions/local-emulator

इस सुविधा का उपयोग करने के लिए, firebase उपकरण न्यूनतम संस्करण 3.8.0, होना आवश्यक है और फायरबेस-फ़ंक्शन एसडीके में न्यूनतम संस्करण 0.5.7 होना चाहिए। दोनों को अद्यतन करने के अपनी परियोजना के लिए कार्य/निर्देशिका में निम्न कमांड चलाएँ:

npm install --save firebase-functions 
npm install -g firebase-tools 

स्थानीय स्तर पर कार्यों को चलाने के लिए firebase का उपयोग की सेवा:

firebase serve --only functions # to only emulate functions 

सावधानी: प्रायोगिक सुविधा। यह एक प्रयोगात्मक सुविधा है जो वर्तमान में केवल HTTPS फ़ंक्शंस के अनुकरण का समर्थन करती है।

अद्यतन:

अरे कार्य विश्वसनीय परीक्षक,

हम हाल ही में रिलीज़ firebase उपकरण v3.11.0, जो कार्यों के सभी प्रकार की नकल के लिए एक इंटरैक्टिव खोल का समर्थन करता है, और परीक्षण डेटा के साथ उन्हें आमंत्रित किया। इस सुविधा पर फीडबैक सत्रों में भाग लेने के लिए आप में से कई लोगों के लिए धन्यवाद।

इस रोमांचक नई सुविधा का उपयोग करने के लिए हमारे दस्तावेज़ों का संदर्भ लें!

https://firebase.google.com/docs/functions/local-emulator#use_the_cloud_functions_shell

+0

सिंगलस्टेपिंग कर सकते हैं? चर के मूल्य की जांच करने की अनुमति दें? –

-1

नहीं है अब एक बादल functions emulator that आप स्थानीय रूप से

कार्यों फोन मैं इस सवाल का जवाब अपडेट करेगा एक बार मैं अपने PoC पूरा कर लिया है कोड और कदम मैं प्रयोग किया जाता शामिल करने के लिए देता है।

+1

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/16824425) – Lag

0

सबसे पहले, मैं निम्नलिखित निर्भरता स्थापित करने के लिए,

npm install --save firebase-functions 
npm install -g firebase-tools 

पहले से ही तो स्थापित यदि आप इसे नवीनतम एक करने के लिए अद्यतन कर सकते हैं आप सुझाव देते हैं। आम तौर पर, कार्यों-एमुलेटर ऊपर निर्भरता के साथ आता है, लेकिन अभी भी मैं,,, आप इसे अद्यतन करने के लिए सिफारिश करेंगे

npm install -g @google-cloud/functions-emulator 

एक बार जब यह अद्यतन किया गया है आप आवेदन करने और चलाने के लिए निम्न आदेश का कार्य फ़ोल्डर में जा

firebase serve --only functions 

मुझे उम्मीद है कि यह मदद करता है!

संबंधित मुद्दे