यदि आप एक बार में संपूर्ण माइग्रेशन करना चाहते हैं, तो mongoid_rails_migrations आपको जो चाहिए वह करेगा। दस्तावेज़ के लिए वास्तव में बहुत कुछ नहीं है, यह मानक ActiveRecord माइग्रेशन की कार्यक्षमता को डुप्लिकेट करता है। आप अपने माइग्रेशन लिखते हैं, और फिर आप उन्हें लागू करने के लिए rake db:migrate
का उपयोग करते हैं और यह पता लगाता है कि कौन से हैं और भाग नहीं गए हैं। यदि आप कुछ विशिष्ट हैं जो आप इसके बारे में जानना चाहते हैं तो मैं और प्रश्नों का उत्तर दे सकता हूं।
आलसी माइग्रेशन के लिए, सबसे आसान समाधान after_initialize कॉलबैक का उपयोग करना है। अगर एक क्षेत्र पुराने डेटा योजना से मेल खाता है की जाँच करें, और अगर यह होता है तो आप इसे वस्तु को संशोधित करने और अद्यतन यह है, तो उदाहरण के लिए:
class Person
include Mongoid::Document
after_initialize :migrate_data
field :name, :type => String
def migrate_data
if !self[:first_name].blank? or !self[:last_name].blank?
self.set(:name, "#{self[:first_name]} #{self[:last_name]}".strip)
self.remove_attribute(:first_name)
self.remove_attribute(:last_name)
end
end
end
समझौतों से विशिष्ट दृष्टिकोण मैं ऊपर दे दी है साथ ध्यान में रखना:
यदि आप कोई अनुरोध चलाते हैं जो Person.all.each {|p| puts p.name}
जैसे कई रिकॉर्ड लौटाता है और 100 लोगों के पास पुराना प्रारूप होता है, तो यह तुरंत 100 सेट क्वेरी चलाएगा। आप इसके बजाय self.name = "#{self.first_name} #{self.last_name}".strip
पर भी कॉल कर सकते हैं, लेकिन इसका मतलब है कि रिकॉर्ड सहेजा गया है तो आपका डेटा केवल माइग्रेट किया जाएगा।
आपके पास सामान्य समस्याएं हो सकती हैं कि Person.where(:name => /Foo/).count
जैसे किसी भी बड़े प्रश्न विफल हो जाएंगे जब तक कि सभी डेटा माइग्रेट नहीं हो जाते। अगर आप Person.only(:name).first
करते हैं तो माइग्रेशन विफल हो जाएगा क्योंकि आप first_name
और last_name
फ़ील्ड शामिल करना भूल गए हैं।
स्रोत
2011-12-26 02:56:07
मुझे नहीं लगता कि आलसी माइग्रेशन एक अच्छा विचार कर रहे हैं की सराहना करेंगे:
यहाँ मैं के साथ आया है। मैं बड़े पैमाने पर डेटा अपडेट चलाने के लिए समय लेता हूं, इसे पूरा करने, निगरानी करने, प्रतीक्षा करने के तरीके के बारे में सोचने के लिए प्रतीक्षा करें, अगर कुछ भी गलत हो जाता है, और डेटाबेस क्लोन पर पहले परीक्षण करें। इसमें समय लगता है लेकिन यह आपको डेटा असंगतता के साथ नहीं छोड़ेगा। –