mysql - रेल पर रूबी में मेरा डाटाबेस कैसे कॉपी कर सकता हूं?




ruby-on-rails ruby (3)

हम एक रूबी ऑन रेल वेबएप बना रहे हैं, जहां हर ग्राहक को अपना डेटाबेस मिलता है
हमारी वेबसाइट पर एक फ़ॉर्म भरने के बाद डेटाबेस को बनाने की आवश्यकता है

हमारे पास एक टेम्प्लेट डेटाबेस है जिसमें सभी तालिकाओं और स्तंभों की प्रतिलिपि बनाने की आवश्यकता है। रेल पर रूबी से मैं प्रोग्रामेटिक रूप से यह कैसे कर सकता हूं?


आप अपने टेम्पलेट स्कीमा सृजन कोड को एक स्क्रिप्ट में डाल सकते हैं जिसमें आवश्यक तालिका / इंडेक्स / दृश्य / प्रक्रिया निर्माण बयान शामिल हैं, इसे "template_schema.sql" कहते हैं या फिर और फिर अपनी पसंद के डेटाबेस पर स्क्रिप्ट को चलाएं (से रूबी, अगर आप ऐसा कर रहे हैं तो) और आपने किया

सबसे अच्छा तरीका संभवतः प्रत्येक डेटाबेस ऑब्जेक्ट को स्रोत नियंत्रण (अलग-अलग ऑब्जेक्ट्स पर परिवर्तनों को ट्रैक करना आसान बनाने के लिए) के तहत एक अलग फ़ाइल में है और फिर उन्हें तैनाती के भाग के रूप में एक फाइल में मिला दिया गया है


किसी नियंत्रक से, आप निम्न विधि को परिभाषित कर सकते हैं।

 def copy_template_database
        template_name = "customerdb1" # Database to copy from
        new_name = "temp" #database to create & copy to

        #connect to template database to copy.  Note that this will override any previous
        #connections for all Models that inherit from ActiveRecord::Base
        ActiveRecord::Base.establish_connection({:adapter => "mysql", :database => template_name, :host => "olddev",
        :username => "root", :password => "password" })

        sql_connection = ActiveRecord::Base.connection 
        sql_connection.execute("CREATE DATABASE #{new_name} CHARACTER SET latin1 COLLATE latin1_general_ci")
        tables = sql_connection.select_all("Show Tables")
        #the results are an array of hashes, ie:
        # [{"table_from_customerdb1" => "customers"},{"table_from_customerdb1" => "employees},...]
        table_names = Array.new
        tables.each { |hash| hash.each_value { |name| table_names << name }}

        table_names.each { |name| 
            sql_connection.execute("CREATE TABLE #{new_name}.#{name} LIKE #{template_name}.#{name}")
            sql_connection.execute("INSERT INTO #{new_name}.#{name} SELECT * FROM #{template_name}.#{name}")
        }
        #This statement is optional.  It connects ActiveRecord to the new database
        ActiveRecord::Base.establish_connection({:adapter => "mysql", :database => new_name, :host => "olddev",
        :username => "root", :password => "password" })
    end

ध्यान दें कि मुझे यह सुनिश्चित करने के लिए नहीं पता है कि यह फोएगिन कुंजी अखंडता बनाएगा। मुझे लगता है कि यह टेम्प्लेट डेटाबेस का निर्माण कैसे किया जाता है, इस पर बहुत निर्भर करता है।


Yaml_db का उपयोग करके

आपको प्लग-इन स्थापित करने की आवश्यकता है, किसी भी रेल डाटाबेस (mysql सहित) को डेटा.आईएमएल फ़ाइल में रेक कार्य, परिवर्तन कनेक्शन स्ट्रिंग का उपयोग करके नए डाटाबेस को इंगित करने और फिर फ़िनिला लोड डेटा.इम्ल को किसी नए डाटाबेस में (mysql सहित) दूसरे रेक काम का उपयोग करना । बहुत सरल





database