2012-03-27 13 views
17

मैं रेल ट्यूटोरियल के माध्यम से काम कर रहा हूं और अटक गया है। <timestamp>_add_remember_token_to_users.rb को लिस्टिंग 8.16 मैं निम्न संशोधन कर दिया है पर शुरू:रेक डीबी: माइग्रेट काम नहीं कर रहा है

class AddRememberTokenToUsers < ActiveRecord::Migration 
    def change 
    add_column :users, :remember_token, :string 
    add_index :users, :remember_token 
    end 
end 

गाइड तो देव हमेशा की तरह & परीक्षण डाटाबेस अद्यतन करने के लिए कहते हैं: के लिए * remember_token

$ bundle exec rake db:migrate 
$ bundle exec rake db:test:prepare 

मेरे उपयोगकर्ता परीक्षण * अब भी है असफल रहा, इसलिए मैंने उपयोगकर्ता तालिका में डेव और परीक्षण डेटाबेस के साथ कमांड लाइन sqlite3 के साथ एक नज़र डाली। वे इस तरह दिखते हैं:

sqlite> .schema users 
CREATE TABLE "users" (
    "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    "name" varchar(255), 
    "email" varchar(255), 
    "created_at" datetime NOT NULL, 
    "updated_at" datetime NOT NULL, 
    "password_digest" varchar(255)); 
CREATE UNIQUE INDEX "index_users_on_email" ON "users" ("email"); 

ऐसा लगता है कि मेरा माइग्रेशन अभी तक नहीं चला है, लेकिन मुझे नहीं पता कि इसे चलाने के लिए मजबूर कैसे किया जाए।

+0

रेक कार्यों का उत्पादन क्या है? – jdl

+0

यदि आपका मतलब है कि बंडल exec rake db चलाने के बाद क्या आउटपुट है: माइग्रेट करें - कोई आउटपुट नहीं है, बस एक नया प्रॉम्प्ट है। – hippeelee

उत्तर

42

कोशिश अपने डेटाबेस संरचना के पुनर्निर्माण के लिए (चेतावनी: सभी db-डेटा खो जाएगा):

rake db:drop:all 
rake db:create:all 
rake db:migrate 

आप रेल < 4.1 उपयोग करते हैं, मत भूलना परीक्षण डेटाबेस तैयार करने के लिए:

rake db:test:prepare 

यह सबसे आसान समाधान है क्योंकि आप ट्यूटोरियल के साथ काम कर रहे हैं। हालांकि उत्पादन में या विकास में महत्वपूर्ण डेटा रखने में आपको इस मुद्दे की जांच करने में समय लगाना चाहिए। इस मामले में आपने संभवतः एक खाली माइग्रेशन बनाया था, rake db:migrate चलाया, फिर माइग्रेशन के लिए निर्देश जोड़े, इसलिए आपको कोई नया फ़ील्ड नहीं दिखाई देता है और rake db:migrate कुछ भी नहीं करता है। इस समस्या को हल करने के लिए आपको अपने change निर्देशों पर टिप्पणी करने की आवश्यकता है, rake db:rollback, असम्बद्ध निर्देश और फिर rake db:migrate निष्पादित निर्देशों को लागू करने के लिए करें।

+0

यह मेरे डेटाबेस मुद्दे को ठीक किया गया। धन्यवाद। हालांकि, मेरे सभी परीक्षण विफल होने लगे जब तक मुझे $ बंडल निष्पादन रेक डीबी को फिर से चलाने के लिए याद नहीं आया: परीक्षण: – hippeelee

+0

तैयार करें यह काम किया। बस रेल 5.1 के लिए बंडल निष्पादन रेल डीबी {...} करने के लिए अद्यतन करना था। वास्तव में, बंडल निष्पादन भाग भी वैकल्पिक हो सकता है। – VisWebsoft

2

वापस रोल करें और फिर माइग्रेशन चलाएं जो यह काम कर सकता है।

 rake db:rollback 

और फिर वापस रोलिंग के बाद अपने माइग्रेशन को फिर से चलाएं।

4

मुझे प्रारंभिक प्रश्न के समान ही समस्या थी। $ bundle exec rake db:migrate .db और latha doddikadi के उत्तर में mem_token जोड़ नहीं रहा था मेरे लिए काम किया।

मैंने किया:

rake db:rollback 

और उसके बाद:

$ bundle exec rake db:migrate 

जो डेटाबेस के लिए remember_token क्षेत्र जोड़ा पीछा द्वारा:

bundle exec rspec spec/models/user_spec.rb 

जो पारित कर दिया।

Finished in 0.92841 seconds 
21 examples, 0 failures 
संबंधित मुद्दे

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