Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

रेल में वन-टाइम स्क्रिप्ट लिखना

क्या आप कभी भी CSV फ़ाइल से अपने ऐप में डेटा का एक गुच्छा आयात करना चाहते हैं? या हो सकता है कि आपको अपनी कुछ ग्राहक समीक्षाओं में बुरी तरह से एन्कोड किए गए वर्णों को ठीक करने की आवश्यकता हो। या आपने अपना विचार बदल दिया है कि आप Redis में डेटा कैसे संग्रहीत करना चाहते हैं, और सब कुछ पुराने स्वरूप से नए स्वरूप में स्थानांतरित करना पड़ा।

एवो में, हमने इन "तदर्थ कार्यों" को बुलाया। जैसा कि, आपको शायद उन्हें केवल एक बार चलाने की आवश्यकता है। तो रेल में तदर्थ कार्य को संभालने का सबसे अच्छा तरीका क्या है?

डेटाबेस माइग्रेशन लिखें

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

यदि आप एक ही समय में डेटा बदल रहे हैं, तो माइग्रेशन हो सकता है अच्छा काम। लेकिन कुछ बातों का ध्यान रखना है।

कुछ कॉल करना जैसे Permissions.create(...) आपके प्रवास में आपको परेशानी हो सकती है। यदि मॉडल बदल गया है, तो आपका माइग्रेशन टूट सकता है, क्योंकि माइग्रेशन चलने पर आपका मॉडल उपलब्ध नहीं हो सकता है। या हो सकता है कि आपके द्वारा माइग्रेशन लिखे जाने और उसके चलने के समय के बीच आपका मॉडल बदल गया हो। इससे बचने के तरीके हैं, लेकिन वे त्रुटि-प्रवण हैं और अजीब तरीकों से विफल हो सकते हैं।

यदि आपके कार्य में ActiveRecord शामिल नहीं है, तो माइग्रेशन भी कम उपयोगी होते हैं।

ये डील-ब्रेकर नहीं हैं। लेकिन मैं माइग्रेशन में अधिक डेटा आयात या परिवर्तित नहीं करता हूं। बेहतर विकल्प हैं।

रेक टास्क लिखें

आपके पास एक कार्य है। आप शायद इसे केवल एक बार चलाना चाहते हैं। और आप इसे अपनी मशीन पर परीक्षण करने और इसे उत्पादन में चलाने में सक्षम होना चाहते हैं।

रेक कार्य इसके लिए वास्तव में अच्छा काम करते हैं। रेल आपके लिए रेक कार्य भी उत्पन्न कर सकते हैं:

$ be rails g task locations import
      create  lib/tasks/locations.rake

यह आपके लिए अपना कोड छिपाने के लिए एक फ़ाइल बनाता है:

lib/tasks/locations.rake
namespace :locations do
  desc "TODO"
  task import: :environment do

  end
end

उस task . के अंदर ब्लॉक, आप अपने रेल ऐप में अपने सभी मॉडलों और शेष कोड का उपयोग कर सकते हैं। डेटा आयात करना और बदलना आसान है, क्योंकि आप अपना कोड वैसे ही लिख सकते हैं जैसे आप रेल कंसोल पर बैठे थे।

एक बार जब आप अपना कार्य लिख लेते हैं, तो आप इसे rake locations:import के साथ चला सकते हैं . यदि आप हरोकू का उपयोग कर रहे हैं, तो आप इसे heroku run rake locations:import के साथ चला सकते हैं। . यदि आप Capistrano का उपयोग कर रहे हैं, तो आप अपना कार्य चलाने के लिए capistrano-rake रत्न का उपयोग कर सकते हैं। हालांकि, आपके पास इससे भी बेहतर विकल्प हो सकता है।

sidekiq-scheduler का उपयोग करके शेड्यूल किया गया कार्य लिखें

अगर आपका ऐप काफी बड़ा है, तो आप शायद पहले से ही Sidekiq, Resque, या ऐसा ही कुछ उपयोग कर रहे हैं।

इनमें से अधिकांश बैकग्राउंड जॉब प्रोसेसर बाद में चलने के लिए जॉब शेड्यूल कर सकते हैं। साइडकीक में, उदाहरण के लिए, साइडकीक-शेड्यूलर रत्न है। और साइडकीक-शेड्यूलर के साथ, आप एक तरकीब कर सकते हैं।

क्या होगा यदि आपके पास कोई ऐसा कार्य हो जो कभी स्वचालित रूप से न हो स्वयं शेड्यूल किया गया है, लेकिन आपको मैन्युअल रूप से जब चाहें इसे शेड्यूल करें? यह "एकबारगी" नौकरियों के लिए बहुत अच्छा काम करेगा जिसे आप बाद में फिर से चलाना चाहेंगे, या जिसे आप यूआई का उपयोग करके चलाएंगे।

sidekiq-scheduler में, आप भविष्य में कार्य को दूर तक शेड्यूल कर सकते हैं, और कार्य को अक्षम पर सेट कर सकते हैं:

sidekiq.yml
:schedule:
  location_importer:
    class: LocationImporterWorker
    at: '3001/01/01'
    enabled: false

फिर, जब आप साइडकीक-वेब पर जाते हैं, तो आपको कार्य को मैन्युअल रूप से संलग्न करने के लिए एक बटन दिखाई देगा:

रेल में वन-टाइम स्क्रिप्ट लिखना

इसके साथ, आप जब भी तैयार हों, विकास और उत्पादन दोनों में अपना काम चला सकते हैं। और अगर आपको इसे फिर से चलाने की आवश्यकता है, तो यह UI में वहीं है।

यदि आपकी नौकरी खतरनाक है तो यह सबसे अच्छा विकल्प नहीं है। गलती से उस बटन पर क्लिक करना बहुत आसान है। और यह भी बहुत अच्छा नहीं है अगर काम पूरा होने में कुछ समय लगता है, क्योंकि साइडकीक सबसे अच्छा काम करता है अगर काम जल्दी खत्म हो जाए। आपकी नौकरी एक कार्यकर्ता को संभाल लेगी, और जब तक आपका काम खत्म नहीं हो जाता, तब तक आप साइडकीक को सुरक्षित रूप से पुनः आरंभ करने में सक्षम नहीं होंगे। लेकिन अगर आपका काम तेज है, और एक से अधिक बार सुरक्षित रूप से चल सकता है, तो यह अच्छा काम करता है। यदि यह एक सफाई प्रकार का कार्य है, तो आप तय कर सकते हैं कि आप चाहते हैं इसे नियमित रूप से चलाने के लिए।

यदि आप केवल शेड्यूलिंग और ट्रिगरिंग पर ध्यान केंद्रित करना चाहते हैं, या अपनी एक बार की स्क्रिप्ट में पैरामीटर सेट करने के लिए अधिक लचीलेपन की आवश्यकता है, तो एक पाठक, दिमित्री ने मुझे साइडकीक-एनक्यूअर पर इंगित किया। sidekiq-enqueuer के साथ, आप सभी Sidekiq वेब इंटरफ़ेस के माध्यम से कार्य शेड्यूल कर सकते हैं और पैरामीटर सेट कर सकते हैं।

SSH को प्रोडक्शन में डालें और कोड को Rails कंसोल में पेस्ट करें

मजाक कर रहे हैं।

आपको कौन सा चुनना चाहिए?

मैंने एकबारगी कार्यों को चलाने के लिए इन सभी तरीकों का उपयोग किया है। लेकिन मैं आमतौर पर पहले रेक टास्क के लिए जाऊंगा। यह काम करता है, गलती से दौड़ना मुश्किल है, और जब आप इसे पूरा कर लेंगे तो इससे छुटकारा पाना आसान है। हालांकि, मैं हर बार रेक टास्क नहीं चुनता।

मैं माइग्रेशन चुन सकता हूं यदि:

  • कार्य डेटाबेस स्कीमा परिवर्तन के भाग के रूप में SQL का उपयोग करके डेटा को ठीक करता है।
  • कार्य बहुत ही सरल डेटा कार्य है, जैसे किसी कॉलम में डेटा बदलना या कुछ रिकॉर्ड जोड़ना।
  • मैं आसानी से ट्रैक करना चाहता हूं कि क्या कार्य चलाया गया है, और इसे फिर से नहीं चलाया जाए।

मैं एक साइडकीक नौकरी चुन सकता हूं यदि:

  • मुझे लगता है कि मैं बाद में फिर से नौकरी चलाना चाह सकता हूं।
  • कोई व्यक्ति जो मैं नहीं हूं, उसे इसे चलाना होगा। उन्हें बस एक बटन क्लिक करना है।
  • यह एक छोटा डेटा आयात या डेटा क्लीनअप कार्य है। मुझे शायद उन्हें नियमित रूप से चलाना होगा, भले ही मुझे पहले इसकी उम्मीद न हो।

आप कैसे हैं? क्या आपके पास कोई अन्य विकल्प है, या अलग-अलग विकल्प हैं? एक टिप्पणी छोड़ें और मुझे बताएं!


  1. रेल के साथ हॉटवायर का उपयोग करना

    यदि आप बिना किसी जावास्क्रिप्ट कोड को लिखे पेज परिवर्तन और फॉर्म सबमिशन को तेज करने और जटिल पेजों को घटकों में विभाजित करने का तरीका ढूंढ रहे हैं, तो यह पोस्ट आपको हॉटवायर के साथ रेल को अगले स्तर तक ले जाने में मदद करेगी। यह लेख आपको सर्वर-साइड रेंडरिंग के लिए टूल का उपयोग करना सिखाएगा। हॉटवायर क्या

  1. एडब्ल्यूएस लैम्ब्डा के लिए रेल की तैनाती

    सर्वर रहित कंप्यूटिंग एक क्लाउड प्रदाता को सर्वर के प्रबंधन और प्रावधान के काम को उतारने में मदद करती है और तेजी से अधिकांश प्रौद्योगिकी टीमों के लिए एक चीज बन रही है। AWS लैम्ब्डा एक प्रकार की सर्वर रहित तकनीक है जिसका उपयोग कई तकनीकी टीमों द्वारा किया जाता है। AWS लैम्ब्डा NodeJS, Java, Python और

  1. रेल के साथ कोणीय का उपयोग करना 5

    आपने पहले कहानी सुनी है। आपके पास पहले से ही आपके विकेन्द्रीकृत और पूरी तरह से काम कर रहे बैक-एंड एपीआई और किसी भी सामान्य टूलसेट से बने फ्रंट-एंड पर चलने वाला एक एप्लिकेशन है। अब, आप कोणीय पर आगे बढ़ना चाहते हैं। या, शायद आप अपनी रेल परियोजनाओं के साथ एंगुलर को एकीकृत करने का एक तरीका ढूंढ रहे हैं