2013-02-19 19 views
11

पृष्ठभूमि: अपने प्रोजेक्ट के लिए djangoratings जोड़ने के बाद, मैंदक्षिण विस्थापित त्रुटि - संबंध पहले से मौजूद है

django-admin.py schemamigration djangoratings --initial 
--settings=myapp.settings.local 

जो schemamigration के लिए एक अज्ञात आदेश त्रुटि हुई चल की कोशिश की। मैंने अपनी परियोजना निर्देशिका को PYTHONPATH में जोड़कर इस त्रुटि को हल करने का प्रयास किया (मैं वर्चुअलएन्व और वर्चुअलएन्वार्पर का उपयोग कर रहा हूं)। इसने स्कीमप्रेशन के लिए अज्ञात कमांड त्रुटि को हल किया, लेकिन मुझे लगता है कि मैंने अपनी परियोजना निर्देशिका के ऊपर PYTHONPATH के लिए एक निर्देशिका निर्दिष्ट की है और जब प्रारंभिक माइग्रेशन djangoratings के लिए चलाया गया था, तो उसने व्हाओश के साथ कुछ करने के बारे में शिकायत की (जिसे मैं अपने प्रोजेक्ट में उपयोग कर रहा हूं)। मैंने PYTHONPATH निर्देशिका को बदल दिया और

django-admin.py schemamigration djangoratings --initial 
--settings=myapp.settings.local 

फिर से चलाने का प्रयास किया। तब मैं माइग्रेट कमांड चला गया।

django.db.utils.DatabaseError: relation "djangoratings_vote" already exists 

मैं सभी तरह से पलायन वापस उपयोग करने की कोशिश:: यह जब मैं त्रुटि प्राप्त है फिर

django-admin.py migrate djangoratings zero --settings=myapp.settings.local 
Running migrations for djangoratings: 
- Migrating backwards to zero state. 
< djangoratings:0006_add_cookies 
< djangoratings:0005_add_exclusions 
< djangoratings:0004_rethink_recommendations 
< djangoratings:0003_add_correlations 
< djangoratings:0002_add_mean_and_stddev 
< djangoratings:0001_initial 

और फिर चल --initial, लेकिन विस्थापित आदेश प्रदर्शन के बाद एक ही त्रुटि हो गई।

मैंने अपने डेटाबेस में तालिकाओं की सूची देखी और djangoratings_vote के लिए कोई भी नहीं देखा।

मेरे वर्तमान djangoratings के लिए लिस्टिंग माइग्रेशन इस प्रकार है:

0001_initial.py     0006_add_cookies.py 
0001_initial.pyc     0006_add_cookies.pyc 
0002_add_mean_and_stddev.py  0007_initial.py 
0002_add_mean_and_stddev.pyc  0007_initial.pyc 
0003_add_correlations.py   0008_initial.py 
0003_add_correlations.pyc   0008_initial.pyc 
0004_rethink_recommendations.py 0009_initial.py 
0004_rethink_recommendations.pyc 0009_initial.pyc 
0005_add_exclusions.py   __init__.py 
0005_add_exclusions.pyc   __init__.pyc 

मैं कैसे संबंध "djangoratings_vote" पहले से ही मौजूद है त्रुटि को हल कर सकते हैं? पसंदीदा रूप से दक्षिण का उपयोग कर रहे हैं?

उत्तर

13

यह मुझे लगता है जैसे दक्षिण आपके डेटाबेस के साथ सिंक हो गया है (ऐसा तब हो सकता है जब दक्षिण ने तालिकाओं को बनाना शुरू कर दिया हो, लेकिन फिर पीछे की ओर माइग्रेशन को पूरा करने में सक्षम होने के बिना विफल हो जाता है)। मैं मैन्युअल रूप से डेटाबेस बहाल करने के रूप में इस की सलाह देते हैं और दक्षिण होगा (अपने डाटाबेस से एक वापस पहले एक गलती के मामले में लेने के लिए):

  1. अपने डेटाबेस से सभी djangoratings_ हटाएँ * टेबल।
  2. डेटाबेस में दक्षिण_ माइग्रेशन इतिहास तालिका खोलें, और ऐप नाम से फ़िल्टर करें। Djangoratings के लिए सभी प्रविष्टियों को हटा दें।
  3. djangoratings/migrations निर्देशिका में सभी माइग्रेशन फ़ाइलों को हटाएं।

एक बार ऐसा करने के बाद, आपके पास एक स्वच्छ डेटाबेस और दक्षिण इतिहास होना चाहिए। इस बिंदु पर, पुनः चलाएं:

./manage.py schemamigration djangoratings --initial 

जो एक एकल माइग्रेशन फ़ाइल उत्पन्न करेगा। तब:

./manage.py migrate djangoratings. 

यह मानते हुए कि आप Django रेटिंग्स का उपयोग करने के लिए तैयार हैं नहीं मिलता त्रुटियों है कि आप पहली बार था, इस डेटाबेस की स्थापना करनी चाहिए।

+1

धन्यवाद! मैं समस्याओं के बिना माइग्रेट कमांड करने में सक्षम था। मेरे पास डीबी में कोई djangoratings टेबल या djangoratings प्रविष्टियां नहीं थी, इसलिए मुझे बस अपनी माइग्रेशन फ़ाइलों को हटाने की जरूरत है। – Derek

+0

कोई समस्या नहीं, खुशी हुई यह काम किया। –

+0

मुझे एक ही समस्या है, लेकिन एक ताजा बनाया गया डेटाबेस पर। मैंने माइग्रेशन को हटाने की कोशिश की, डेटाबेस मिटा दिया और दक्षिण को फिर से स्थापित किया, लेकिन कुछ भी नहीं बदला है, इसे ठीक करने के तरीके पर कोई विचार है? – SuburbanFilth

23

वहाँ इसे हल करने के लिए एक बेहतर तरीका है:

python manage.py migrate djangoratings --fake 

और उसके बाद:

python manage.py migrate 
+2

यह दक्षिण के बिना Django 1.8 में भी काम करता है – aralar

1

यह @ stef_huayue के जवाब का एक विस्तार में है अगर यह काफी काम अपेक्षा के अनुरूप नहीं है।

पता लगाएं कि कौन सा माइग्रेशन विफल हुआ। Coressponding migration_file.py आमतौर पर migrations.AddField ऑपरेशन हो रहा है। फिर चलाएं: python manage.py migrate app_name --fake [migration_file]

फ़ाइल एक्सटेंशन के बिना। द्वारा पीछा:

python manage.py migrate app_name

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