কম্পিউটার

মঙ্গোয়েড 5 / মঙ্গো-রুবি-ড্রাইভারে আপগ্রেড করা হচ্ছে

ডেভেলপমেন্ট কনফিগারেশন

Mongoid 5 এ আপগ্রেড করার পরে আপনার Rails অ্যাপ শুরু করার সময় আপনি প্রথম যে জিনিসগুলির সম্মুখীন হবেন তা হল আপনার ডাটাবেস কনফিগারেশন ভুল হওয়ার বিষয়ে একটি ত্রুটি৷

সমাধান করা সহজ, শুধু sessions পরিবর্তন করুন clients কাছে :

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

ড্রাইভার পরিবর্তন

আমাদের কোডবেসে আমরা মংগয়েড ব্যবহার না করে সরাসরি মোপেড/মঙ্গো-রুবি-ড্রাইভারে প্রশ্নগুলি চালানোর জন্য অনেকটা "ড্রপ ডাউন" করি, যেমন প্রতিটি অ্যাকাউন্টের জন্য সংগ্রহ তৈরি করতে। এখানে আপনাকে sessions পরিবর্তন করতে হবে 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 আছে পদ্ধতি যা একটি একক নথি বা নথির অ্যারে গ্রহণ করে। নতুন মঙ্গো-রুবি-ড্রাইভার দুটি পৃথক পদ্ধতির সাথে আসে, এবং আপনি যে পরিমাণ নথি সন্নিবেশ করতে চান তার উপর নির্ভর করে একটি বেছে নেওয়া উচিত:

# 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

FindAnd Modify

Find_and_modify সরিয়ে ফেলা হয়েছে. পরিবর্তে এখন আপনার কাছে বেছে নেওয়ার জন্য 3টি পদ্ধতি রয়েছে:

  • find_one_and_update
  • find_one_and_replace (সুবিধা পদ্ধতি, find_one_and_update কল করে )
  • find_one_and_delete

সেকেন্ডের পরে মেয়াদ শেষ হবে

আরও অস্পষ্ট পরিবর্তনগুলির মধ্যে একটি হল একটি টিটিএল সূচক তৈরির উপায়। আমরা গ্রাহকদের প্ল্যানের উপর নির্ভর করে স্বয়ংক্রিয়ভাবে ডেটা পরিষ্কার করতে TTL সূচী ব্যবহার করি (যেমন 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, কিন্তু আমাদের auth_mech সরাতে হবে সেটআপ কাজ করার জন্য সব একসাথে কী।

উপসংহার

যদিও এটি বেশ বিস্তৃত তালিকা, আমরা আপগ্রেডটিকে তুলনামূলকভাবে ব্যথাহীন বলে খুঁজে পেয়েছি এবং নতুন ড্রাইভারটি পুরানো মোপেড ড্রাইভারের তুলনায় অনেক বেশি শক্ত মনে করে৷


  1. কিভাবে একটি Windows 10 ডিফল্ট প্রিন্টার সেট করবেন

  2. জাভাস্ক্রিপ্টে ডিফল্ট রপ্তানি বনাম নামকৃত রপ্তানি।

  3. এটা কি উইন্ডোজ 11 এ আপগ্রেড করা মূল্যবান?

  4. Windows 10 ডিফল্ট পাসওয়ার্ড কি