কম্পিউটার টিউটোরিয়াল

Mongoid 5-এ সুসঙ্গত মাইগ্রেশন: আপডেটেড ড্রাইভার কনফিগারেশন ও সেরা অনুশীলন

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

Mongoid 5-এ আপগ্রেড করার পর রেইলস অ্যাপ শুরু করার সময় আপনি যে প্রথম সমস্যায় পড়বেন সেটি হলো ডাটাবেস কনফিগারেশন ভুল বলে একটি এরর।

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

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

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

আমাদের কোডবেসে আমরা অনেক জায়গায় "ড্রপ ডাউন টু দ ড্রাইভার" করি, অর্থাৎ Mongoid ব্যবহার না করে সরাসরি moped/mongo-ruby-driver-এ কোয়েরি এক্সিকিউট করি, যেমন প্রতিটি একাউন্টের জন্য কালেকশন তৈরি করতে। এখানেও আপনাকে 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

Moped-এ একটি 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 দিয়ে অর্ডার্ড নয়।

যদি কোনো সর্টিং অপশন না দিয়ে থাকে, first এবং last আর _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 সরিয়ে ফেলা হয়েছে। এর পরিবর্তে এখন আপনার पास ৩টি মেথড আছে:

  • find_one_and_update
  • find_one_and_replace (সুবিধার মেথড, find_one_and_update কল করে)
  • find_one_and_delete

ExpireAfterSeconds

আরেকটি অপ্রচলিত পরিবর্তন হলো TTL ইন্ডেক্স তৈরির পদ্ধতি। আমরা TTL ইন্ডেক্স ব্যবহার করি কাস্টমার ডেটা অটোমেটিক পার্জ করার জন্য তাদের প্ল্যান অনুযায়ী (যেমন ৭ দিন বা এক মাস পর)।

ইন্ডেক্সে অপশনটি আগে 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 ২.৪ এবং ২.৬ :plain অথেন্টিকেশন ব্যবহার করে, কিন্তু আমাদের কেসে auth_mech কী সম্পূর্ণ সরিয়ে ফেলা লাগলো সেটআপ কাজ করার জন্য।

উপসংহার

যদিও এটি একটি বড় লিস্ট, আমরা আপগ্রেডটিকে tương đối পেইনলেস পেয়েছি এবং নতুন ড্রাইভার পুরনো Moped ড্রাইভার চেয়ে অনেক বেশি স olid লাগছে।


  1. Windows 10-এ ডিফল্ট প্রিন্টার সেট আপ করার পূর্ণাঙ্গ পদ্ধতি

  2. জাভাস্ক্রিপ্টে ডিফল্ট এক্সপোর্ট vs নেমড এক্সপোর্ট

  3. উইন্ডোজ ১১-এ আপগ্রেড করা কী সার্থক?

  4. উইন্ডোজ ১০ ডিফল্ট অ্যাডমিন পাসওয়ার্ড আবিষ্কার করুন: লুকানো ফিচার আনলক করুন