2015-06-17 7 views
13

मेरे पास django 1.7 के साथ एक कामकाजी प्रोजेक्ट था, और अब मैं इसे django 1.8 में ले गया। मैं syncdb कर सकते हैं और SQLite के साथ अनुप्रयोग चलाने, लेकिन जब मैं postgres करने के लिए स्विच, यह syncdb करने के लिए विफल रहता है:django 1.8 django.db.utils में विफल रहता है। प्रोग्रामिंग त्रुटि: संबंध "auth_user" मौजूद नहीं है

Creating tables... 
    Creating table x 
    Creating table y 
    Running deferred SQL... 
Traceback (most recent call last): 
    File "manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "~/venv/lib/python2.7/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line 
    utility.execute() 
    File "~/venv/lib/python2.7/site-packages/django/core/management/__init__.py", line 330, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "~/venv/lib/python2.7/site-packages/django/core/management/base.py", line 390, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "~/venv/lib/python2.7/site-packages/django/core/management/base.py", line 441, in execute 
    output = self.handle(*args, **options) 
    File "~/venv/lib/python2.7/site-packages/django/core/management/commands/syncdb.py", line 25, in handle 
    call_command("migrate", **options) 
    File "~/venv/lib/python2.7/site-packages/django/core/management/__init__.py", line 120, in call_command 
    return command.execute(*args, **defaults) 
    File "~/venv/lib/python2.7/site-packages/django/core/management/base.py", line 441, in execute 
    output = self.handle(*args, **options) 
    File "~/venv/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 179, in handle 
    created_models = self.sync_apps(connection, executor.loader.unmigrated_apps) 
    File "~/venv/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 317, in sync_apps 
    cursor.execute(statement) 
    File "~/venv/lib/python2.7/site-packages/django/db/backends/utils.py", line 79, in execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "~/venv/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
    File "~/venv/lib/python2.7/site-packages/django/db/utils.py", line 97, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "~/venv/lib/python2.7/site-packages/django/db/backends/utils.py", line 62, in execute 
    return self.cursor.execute(sql) 
django.db.utils.ProgrammingError: relation "auth_user" does not exist 

मैं डेटाबेस हटाने और पुनः बनाने की कोशिश की। इसके अलावा, मैं करने की कोशिश की:

python manage.py migrate auth 

जो भी विफल रहता है:

django.db.utils.ProgrammingError: relation "django_site" does not exist 

LINE 1: SELECT (1) AS "a" FROM "django_site" LIMIT 1 

कृपया मदद इस तय मिलता है।

+0

और फिर यदि आप अपने डेटाबेस बैकएंड के लिए एसक्लाइट पर वापस स्विच करते हैं और खाली डेटाबेस से शुरू करते हैं, तो यह फिर से काम करता है? – Louis

+1

यह Django 1.8 में परिवर्तनों के साथ कुछ करने के लिए हो सकता है: जब आप पहले से मौजूद हैं तो माइग्रेट करते समय '--fake -itial' विकल्प का उपयोग करने का प्रयास करें; यह अंतर्निहित था, लेकिन अब स्पष्ट किया गया है: https://docs.djangoproject.com/en/1.8/ref/django-admin/#django-admin-option---fake-initial क्या आपने इसे हटाने का प्रयास किया था SQLite डीबी या PostgreSQL डीबी? – FlipperPA

+0

हां। मैंने डेटाबेस को हटाने का प्रयास किया है। जब मैं 'python manage.py माइग्रेट - फ़ाक-प्रारंभिक myapp' चलाता हूं तो यह मुझे त्रुटि देता है: ऐप में माइग्रेशन नहीं होते हैं (आप अनियमित ऐप्स को चुनिंदा सिंक नहीं कर सकते हैं) – max

उत्तर

2

मुझे एक ही समस्या थी, और मैंने अपने सिर को टक्कर देने में कई घंटे बिताए, जो समाधान में छिपा हुआ था। मेरी समस्या यह थी कि CircleCI इस त्रुटि के कारण परीक्षण नहीं चला सका। और मैंने सोचा कि मुझे एक नए और खाली डीबी के साथ ताजा शुरू करने की आवश्यकता होगी। लेकिन मुझे एक ही त्रुटि मिली। सब कुछ 'auth', 'contenttypes' और 'साइटों' से प्रतीत होता था।

मैंने this, और this, साथ ही this और this पढ़ा। मेरे लिए कोई समाधान नहीं था।

  1. टिप्पणी बाहर User मॉडल से संबंधित सभी कोड:

    मेरी डीबी नष्ट कर दिया और एक नया एक, एकमात्र समाधान मैं पूरी तरह इन django.db.utils.ProgrammingError से बचने के लिए पाया बनाई होने के बाद तो करना था।

  2. मेरी परियोजना में सभी .pyc फ़ाइलों को हटाएं! find . -name "*.pyc" -exec rm -- {} + धन्यवाद @ मैक्स!
  3. रन ./manage.py migrate (कोई नकली, कोई नकली प्रारंभिक, 'प्रमाणन' या 'CONTENTTYPES' से पहले, का कोई प्रवास सादा ऊपर कोड विस्थापित जस्ट।
  4. टिप्पणी हटाएं, और फिर से माइग्रेट चलाने!

मेरे INSTALLED_APP है निम्नलिखित:

INSTALLED_APPS = (
    'django.contrib.admin', 
    'django.contrib.contenttypes', 
    'django.contrib.sites', 
    'django.contrib.auth', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'rest_framework', 
    'mptt', 
    'djangobower', 
    'honeypot', 
    'django_hosts', 
    'leaflet', 
    'multiselectfield', 
    'corsheaders', 
    'rest_framework_swagger', 
    'allauth', 
    'allauth.account', 
    # 'allauth.socialaccount', 
    # 'allauth.socialaccount.providers.twitter', 
    # 'allauth.socialaccount.providers.facebook', 
    'project.<app_name>', 
) 
+1

दूसरी बार जब आप माइग्रेट करते हैं, तो जिस कोड पर आपने टिप्पणी की है, वह निश्चित नहीं होगा, लेकिन जब आप अपने एप्लिकेशन को कहीं और तैनात करना चाहते हैं, तो माइग्रेशन खरोंच से भागना होगा? यदि उपयोगकर्ता से संबंधित कोड आवश्यक नहीं है, तो आपको बस इससे छुटकारा पाना चाहिए। – borfast

8

मैं टिप्पणी/uncommenting कोड के विचार पसंद नहीं आया, तो मैं एक अलग दृष्टिकोण की कोशिश की:। कुछ एप्लिकेशन को मैं "मैन्युअल" चले गए, और फिर शेष लोगों के लिए django-admin.py migrate चलाने के बाद सभीको हटा रहा हैफाइलें, आदेशों की मेरी दृश्य था:

$ django-admin.py migrate auth 
$ django-admin.py migrate contentypes 
$ django-admin.py migrate sites 
$ django-admin.py migrate MY_CUSTOM_USER_APP 
$ django-admin.py migrate 

जहां MY_CUSTOM_USER_APP मॉडल मैं अपने settings फ़ाइल में करने के लिए AUTH_USER_MODEL सेट युक्त आवेदन का नाम है।

उम्मीद है कि यह मदद कर सकता है। बीटीडब्ल्यू, यह अजीब लगता है कि Django 1.8 में अपने डीबी को सिंक्रनाइज़ करने का सबसे अच्छा तरीका इतना जटिल है। मुझे आश्चर्य है कि मुझे कुछ याद आ रहा है (मैं Django 1.8 से बहुत परिचित नहीं हूं, मैं पुराने संस्करणों के साथ काम करता था)

5

हमेशा नए संस्करणों में python manage.py makemigrations और python manage.py migrate के साथ डीबी माइग्रेट करें। उपरोक्त त्रुटि के लिए यदि पहली बार आप अपना डेटाबेस माइग्रेट कर रहे हैं तो python manage.py migrate --fake-initial का उपयोग करें।डॉक्स https://docs.djangoproject.com/en/1.9/ref/django-admin/#django-admin-migrate

4

देखें Django 1.10 पर कार्य करना मैं एक और समाधान पता चला: मेरा आवेदन में नाम है "वेब", और पहले मैं फोन:

python manage.py makemigrations web 

तो मैं फोन:

python manage.py makemigrations auth 

तो मैं कॉल करता हूं:

python manage.py migrate 

अजीब: यह काम कर रहा है! :) ऐसा लगता है कि AUTH AUUS_USER_MODEL "web.UserProfile" और web_user_profile नामक एक संबंध की खोज कर रहा था, और इसे यह नहीं मिला, इसलिए त्रुटि। दूसरी तरफ, कॉलिंग मकेमिग्रेशन वेब पहले पहले आवश्यक संबंध बनाता है, इससे पहले कि वह जांच कर सके और चेतावनी दे सके कि यह वहां नहीं है।

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