ডেভেলপমেন্ট কনফিগারেশন
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
সরাতে হবে সেটআপ কাজ করার জন্য সব একসাথে কী।
উপসংহার
যদিও এটি বেশ বিস্তৃত তালিকা, আমরা আপগ্রেডটিকে তুলনামূলকভাবে ব্যথাহীন বলে খুঁজে পেয়েছি এবং নতুন ড্রাইভারটি পুরানো মোপেড ড্রাইভারের তুলনায় অনেক বেশি শক্ত মনে করে৷