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

Mongoid 5 / mongo-ruby-driver में अपग्रेड करना

डेवलपमेंट कॉन्फ़िगरेशन

Mongoid 5 में अपग्रेड करने के बाद अपने Rails ऐप को शुरू करते समय आपको सबसे पहले जो चीजें मिलेंगी, उनमें से एक यह है कि आपके डेटाबेस कॉन्फिगरेशन के गलत होने के बारे में एक त्रुटि है।

समाधान आसान है, बस sessions को बदलें clients . के लिए :

development:
  clients:
    default:
      database: appsignal_development
      hosts:
        - localhost:27017

चालक परिवर्तन

हमारे कोडबेस में हम मोंगोइड का उपयोग करने के बजाय सीधे मोपेड/मोंगो-रूबी-ड्राइवर पर प्रश्नों को निष्पादित करने के लिए "ड्राइवर को ड्रॉप डाउन" करते हैं, उदा। प्रत्येक खाते के लिए संग्रह बनाने के लिए। यहां आपको session भी बदलना होगा client . के लिए .एक और बदलाव यह है कि read अब एक :mode के साथ हैश की अपेक्षा करता है कुंजी, सीधे मूल्य के बजाय:

  def create_log_entry_collection
    Mongoid
      .client('default') # used to be `.session('default')`
      .with(:read => {:mode => :primary}) # used to be `read: => :primary`
      .database
      .command(:create => 'foo')
  end

मोपेड में एक insert है विधि जो या तो एक दस्तावेज़ या दस्तावेज़ों की एक सरणी को स्वीकार करती है। नया mongo-ruby-driver दो अलग-अलग तरीकों के साथ आता है, और आप जितने दस्तावेज़ सम्मिलित करना चाहते हैं, उसके आधार पर आपको एक चुनना चाहिए:

# Before
Mongoid.client('default')['foo'].insert(document)
Mongoid.client('default')['foo'].insert([document, document])
 
# After
Mongoid.client('default')['foo'].insert_one(document)
Mongoid.client('default')['foo'].insert_many([document, document])

आदेश की कमी

नए ड्राइवर के साथ सबसे बड़े परिवर्तनों में से एक यह है कि दस्तावेज़ अब _id . पर ऑर्डर नहीं किए जाते हैं डिफ़ॉल्ट रूप से।

<ब्लॉकक्वॉट>

पहले और आखिरी में अब _id नहीं जोड़ें सॉर्ट करें जब कोई सॉर्टिंग विकल्प प्रदान नहीं किया गया हो। यह सुनिश्चित करने के लिए कि कोई दस्तावेज़ पहला या अंतिम है, उसमें अब एक स्पष्ट प्रकार शामिल होना चाहिए।

इसका मतलब यह है कि जहां कहीं भी आप ऑर्डर करने पर भरोसा करते हैं (.first , .last ) आपको _id . द्वारा क्वेरी को स्पष्ट रूप से ऑर्डर करने की आवश्यकता है :

# Before
expect( User.first.name ).to eq 'bob'
expect( User.last.name ).to eq 'kelso'
 
# After
expect( User.asc('_id').first.name ).to eq 'bob'
expect( User.asc('_id').last.name  ).to eq 'kelso'
 

यह सुनिश्चित करने के लिए कि हमारा कोड पहले जैसा व्यवहार करता है, हमने एक चिंता पैदा की जो एक डिफ़ॉल्ट दायरा जोड़ता है जो _id द्वारा ऑर्डर करता है :

# concerns/ordered_by_id_asc.rb
module OrderedByIdAsc
  extend ActiveSupport::Concern
 
  included do
    default_scope -> { asc('_id') }
  end
end
# models/account.rb
class Account
  include Mongoid::Document
  include Mongoid::Timestamps
  include OrderedByIdAsc
end

FindAndModify

Find_and_modify निकाल दिया गया है। इसके बजाय अब आपके पास चुनने के लिए 3 तरीके हैं:

  • find_one_and_update
  • find_one_and_replace (सुविधा विधि, कॉल find_one_and_update )
  • find_one_and_delete

एक्सपायर आफ्टर सेकेंड्स

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

इंडेक्स पर विकल्प को expire_after_seconds . कहा जाता था , लेकिन इसका नाम बदलकर expire_after कर दिया गया है :

# Before
collection.indexes.create_one(
  {:time => 1},
  {:expire_after_seconds => ttl}
)
 
# After:
collection.indexes.create_one(
  {:time => 1},
  {:expire_after => ttl}
)

स्टेजिंग/प्रोडक्शन कॉन्फिग में बदलाव

विकास के दौरान हमें केवल sessions . को बदलने की आवश्यकता थी clients . के लिए , लेकिन हमारे स्टेजिंग/प्रोडक्शन कॉन्फिग को बहुत अधिक काम करने की आवश्यकता है:

# Before
staging:
  sessions:
    default:
      database: appsignal_main
      username: <%= ENV['MONGOID_USERNAME'] %>
      password: <%= ENV['MONGOID_PASSWORD'] %>
      hosts:
        - mongo1.staging:27017
        - mongo2.staging:27017
        - mongo3.staging:27017
      options:
        read: :primary
        pool_size: {{ mongoid_pool_size }}
        ssl:
          ca_file: /etc/ssl/certs/root_ca.crt
          client_cert: /app/shared/config/mongodb_app.crt
          client_key: /app/shared/config/mongodb_app.key
 
# After
staging:
  clients:
    default:
      database: appsignal_main
      hosts:
        - mongo1.staging:27017
        - mongo2.staging:27017
        - mongo3.staging:27017
      options:
        user: <%= ENV['MONGOID_USERNAME'] %>
        password: <%= ENV['MONGOID_PASSWORD'] %>
        read:
          mode: :primary
        max_pool_size: {{ mongoid_pool_size }}
        ssl: true
        ssl_ca_cert: /etc/ssl/certs/root_ca.crt
        ssl_cert: /app/shared/config/mongodb_app.crt
        ssl_key: /app/shared/config/mongodb_app.key
        replica_set: staging
  • username का नाम बदलकर user कर दिया गया है और options . पर ले जाया गया
  • password options . पर ले जाया गया है
  • read अब mode . नामक एक नेस्टेड कुंजी की अपेक्षा करता है
  • SSL अब नेस्टेड हैश नहीं है, लेकिन options . के अंतर्गत सेट है
  • कॉन्फ़िगरेशन के लिए एक replica_set की आवश्यकता होती है कुंजी अगर सेटअप एक रेप्लिकासेट है

अपग्रेड दस्तावेज कहता है कि MongoDB 2.4 और 2.6 :plain . का उपयोग करते हैं प्रमाणीकरण, लेकिन हमें auth_mech . को हटाना होगा सेटअप के काम करने के लिए सभी एक साथ कुंजी।

निष्कर्ष

हालांकि यह काफी विस्तृत सूची है, हमने पाया कि अपग्रेड अपेक्षाकृत दर्द रहित है और नया ड्राइवर पुराने मोपेड ड्राइवर की तुलना में बहुत अधिक ठोस महसूस करता है।


  1. जावास्क्रिप्ट में डिफ़ॉल्ट निर्यात बनाम नामांकित निर्यात।

    प्रति फ़ाइल केवल एक डिफ़ॉल्ट निर्यात हो सकता है और दूसरी फ़ाइल में आयात करते समय हम इसे कोई भी नाम निर्दिष्ट कर सकते हैं। हालाँकि, एक फ़ाइल में कई नामित निर्यात हो सकते हैं और उन्हें उस नाम का उपयोग करके आयात किया जाता है जिसका उपयोग निर्यात करने के लिए किया गया था। जावास्क्रिप्ट में डिफ़ॉल्ट निर्य

  1. क्या यह विंडोज 11 में अपग्रेड करने लायक है?

    24 जून, 2021 को, Microsoft ने सार्वजनिक रूप से Windows 11 की घोषणा करते हुए कहा कि यह इस छुट्टियों के मौसम में उपलब्ध होगा। विंडोज का नया संस्करण पारदर्शी यूआई से लेकर गेमिंग परफॉर्मेंस बूस्ट तक नई सुविधाएं और अपग्रेड लाता है। विंडोज 10 के साथ भाग लेना और नए जारी किए गए विंडोज 11 में स्विच करना डरा

  1. Windows 10 डिफ़ॉल्ट पासवर्ड क्या है

    चूंकि लगभग सभी उपकरणों में आमतौर पर डिवाइस पर कुछ सुविधाओं तक पहुंचने के लिए एक डिफ़ॉल्ट पासवर्ड होता है, आप सोच रहे होंगे कि Windows 10 डिफ़ॉल्ट पासवर्ड क्या है ऐसा इसलिए है ताकि आप मशीन पर छिपी कुछ विशेषताओं तक भी पहुंच सकें। निम्नलिखित मार्गदर्शिका विंडोज 10 डिफ़ॉल्ट व्यवस्थापक पासवर्ड के बारे मे