2011-02-08 19 views
6

वेनिला एसक्यूएल लोड करने के लिए rake db:migrate का उपयोग करके क्या मिल जाएगा?रेक डीबी का उपयोग करना: सीधे माइग्रेट करें, वेनिला एसक्यूएल

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

class AddDateToPost < ActiveRecord::Migration 
    def self.up 
    ActiveRecord::Base.connection.execute("ALTER TABLE `posts` ADD COLUMN date DATETIME NULL") 
    end 

    def self.down 
    ActiveRecord::Base.connection.execute("ALTER TABLE `posts` DROP COLUMN date") 
    end 
end 

उत्तर

17

कि पूरी तरह से स्वीकार्य है और किसी gotchas कर रहे हैं, जब तक आप विश्वास है कि आपके ऊपर और नीचे कार्य एक दूसरे को प्रतिबिंबित लग रहा है के रूप में:

तो माइग्रेशन फ़ाइल की तरह लग रहे हैं। मैं पठनीयता के लिए निम्न कार्य सुझाव है:

 
class AddDateToPost < ActiveRecord::Migration 
    def self.up 
    execute "ALTER TABLE `posts` ADD COLUMN date DATETIME NULL" 
    end 

    def self.down 
    execute "ALTER TABLE `posts` DROP COLUMN date" 
    end 
end 
0

आप रेल standalone-migrations gem का उपयोग करके एक गैर रेल परियोजना में प्रवास तरीकों का उपयोग कर सकते हैं।

require 'standalone_migrations' 
StandaloneMigrations::Tasks.load_tasks 

है कि आप केवल आपके माइग्रेशन आप सामान्य रूप से करना होगा के रूप में सेटअप के बाद:

class AddDateToPost < ActiveRecord::Migration 
    def self.up 
    add_columm :posts, :date, :datetime, default: nil 
    end 

    def self.down 
    remove_columm :posts, :date 
    end 
end 

मणि आप अपने Rakefile निम्न पंक्तियां जोड़ें स्थापित करने के बाद rake db:* कार्यों को सक्षम करने के

संबंधित मुद्दे

 संबंधित मुद्दे