18

नहीं बदलता है मेरे पास एक रेल माइग्रेशन है जो मेरी schema.rb पर लागू नहीं हो रहा है। माइग्रेशन को एक टेबल बनाना चाहिए:रेल माइग्रेशन schema.rb

class CreateUserGraphs < ActiveRecord::Migration 
    def change 
    create_table :user_graphs do |t| 
     t.string :name 
     t.string :content 
     t.integer :user_id 
     t.string :type_id 
     t.integer :upload_id 

     t.timestamps 
    end 

    add_index :user_graphs, [:user_id, :created_at] 
    end 
end 

मैंने डीबी किया: रीसेट करें। तब मैंने रेक डीबी की कोशिश की: माइग्रेट करें: ऊपर संस्करण = 123123123 (यह माइग्रेशन # है)। मैं अपने "देव" वातावरण में हूं।

प्रवासन schema.rb को प्रभावित क्यों नहीं कर रहा है?

+3

क्या आपने पहले डेटाबेस को छोड़ने का प्रयास किया था? 'रेक डीबी: ड्रॉप डीबी: डीबी बनाएं: माइग्रेट करें – Vucko

+1

दिलचस्प काम करता है। 'रेक डीबी कैसे करता है: ड्रॉप डीबी: बनाएँ' 'रेक डीबी: रीसेट' से अलग है? –

+1

'रेक डीबी: रीसेट 'रन' डीबी: डीबी बनाएँ: स्कीमा: लोड डीबी: बीज 'माइग्रेशन के बिना। मुझे लगता है कि 'डीबी: माइग्रेट: रीसेट' आपकी आवश्यकताओं के अनुरूप होगा। – Vucko

उत्तर

39
documentation से

:

rake db:reset कार्य डेटाबेस छोड़ देंगे, इसे पुन: और इसे में वर्तमान स्कीमा लोड।

यह सभी माइग्रेशन चलाने जैसा नहीं है। यह केवल मौजूदा schema.rb फ़ाइल की सामग्री का उपयोग करेगा। यदि माइग्रेशन को वापस नहीं किया जा सकता है, 'रेक डीबी: रीसेट' आपकी मदद नहीं कर सकता है। स्कीमा को डंप करने के बारे में और जानने के लिए 'स्कीमा डंपिंग और आप देखें।'

तो rake db:reset =>db:drop db:create db:schema:load db:seed

सभी माइग्रेशन, उपयोग चलाने के लिए: rake db:drop db:create db:migrate

या db:migrate:reset =>rake db:drop db:create db:migrate

Reference

0

माइग्रेशन की 'संस्करण' कर रहे हैं टाइमस्टैम्प के माध्यम से किया। रेल चेक करता है कि आखिरी रन माइग्रेशन के टाइमस्टैम्प की तुलना करके इसे किस माइग्रेशन को चलाने की आवश्यकता है और यह देखने के लिए कि कोई नया है या नहीं।

यदि आपके नए माइग्रेशन का संस्करण 123123123 है, तो यह नहीं चलाया जाएगा क्योंकि यह संख्या वर्तमान टाइमस्टैम्प (उदाहरण के लिए 20131209170300) से अधिक नहीं है।

0

त्रुटि विवरण प्राप्त करने का एक तरीका मिला। भाग गया रेक db: माइग्रेट करें: रीसेट और

`SQLite3::SQLException: Cannot add a NOT NULL column with default value NULL: ALTER TABLE "rooms" ADD "priority" integer NOT NULL/usr/local/rvm/gems/ruby-2.2.1/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:91:in `initialize`' 
0

प्राप्त मैं एक ही समस्या थी ... यह पता चला है कि यह था क्योंकि मैं अपने प्रवास फ़ाइल का नाम संपादित neater देखो करने के लिए। सुनिश्चित करें कि आपने माइग्रेशन फ़ाइल शीर्षक में टाइम स्टैंप को हटाया नहीं है जैसा मैंने किया था।

मैंने माइग्रेशन फ़ाइल, मॉडल, नियंत्रक, और संबंधित परीक्षणों को हटा दिया और समस्या को ठीक करने वाले नियंत्रक और मॉडल को फिर से उत्पन्न किया।

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