2011-04-06 14 views
7

स्थानीय देव के लिए sqlite3 के साथ काम कर रहा है। प्रोड डीबी MySQL है।रेल माइग्रेशन और कॉलम चेंज

कॉलम परिवर्तन के लिए माइग्रेशन फ़ाइल है।

class ChangeDateToOrders < ActiveRecord::Migration 
    def self.up 
    change_column(:orders, :closed_date, :datetime) 
    end 

    def self.down 
    change_column(:orders, :closed_date, :date) 
    end 
end 

त्रुटियाँ बाहर कह index name 'temp_index_altered_orders_on_closed_location_id_and_parent_company_id' on table 'altered_orders' is too long; the limit is 64 characters

पता SQLite के साथ सूचकांक नाम पर एक सीमा होती है, लेकिन इसके लिए एक समाधान नहीं है?

संपादित वर्कअराउंड मैं का इस्तेमाल किया।

class ChangeDateToOrders < ActiveRecord::Migration 
    def self.up 
    remove_index(:orders, [:closed_location_id, :parent_company_id]) 
    change_column(:orders, :closed_date, :datetime) 
    add_index(:orders, [:closed_location_id, :parent_company_id], :name => "add_index_to_orders_cli_pci") 
    end 

    def self.down 
    remove_index(:orders, :name => "add_index_to_orders_cli_pci") 
    change_column(:orders, :closed_date, :date) 
    add_index(:orders, [:closed_location_id, :parent_company_id]) 
    end 
end 

उत्तर

1

व्यक्तिगत रूप से, मुझे जितना संभव हो सके मिलान करने के लिए मेरे उत्पादन और विकास वातावरण पसंद है। यह गेटचा से बचने में मदद करता है। अगर मैं MySQL तैनात कर रहा था तो मैं अपने विकास पर्यावरण को MySQL के साथ भी चलाऊंगा। इसके अलावा, मैं SQLite से भी बहुत परिचित नहीं हूं इसलिए यह दृष्टिकोण मेरी आलसी पक्ष से अपील करता है - मुझे केवल एक डीबी के इन्स और बहिष्कारों को जानने की आवश्यकता है।

0

आप सक्रिय रिकॉर्ड की अपनी प्रतिलिपि बना सकते हैं; जोड़े निम्नलिखित

  opts[:name] = opts[:name][0..63] # can't be more than 64 chars long 

लाइन 535 के आसपास $ GEM_HOME/रत्न/ActiveRecord-3.2.9/lib/active_record/connection_adapters/sqlite_adapter.rb

यह एक हैक लेकिन इसके बारे में (संस्करण 3.2.9 में) आपको एक बाधा से दूर हो सकता है। यदि मेरे पास अधिक समय था, तो मैं एक परीक्षा लिखने और रेल कोर टीम को पुल अनुरोध भेजने के लिए देखता हूं।

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