2012-04-19 80 views
33

Tôi đã tạo một dự án django 1.4 đơn giản và đang cố gắng phát hành syncdb để tạo lược đồ db (postgres). Tôi nhận được lỗi này: -"settings.DATABASES được cấu hình không đúng" lỗi thực hiện syncdb với django 1.4

Traceback (most recent call last): 
File "manage.py", line 10, in <module> 
execute_from_command_line(sys.argv) 
File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 443, in execute_from_command_line 
utility.execute() 
File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 382, in execute 
self.fetch_command(subcommand).run_from_argv(self.argv) 
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 196, in run_from_argv 
self.execute(*args, **options.__dict__) 
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 232, in execute 
output = self.handle(*args, **options) 
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 371, in handle 
return self.handle_noargs(**options) 
File "/usr/local/lib/python2.6/dist-packages/django/core/management/commands/syncdb.py", line 57, in handle_noargs 
cursor = connection.cursor() 
File "/usr/local/lib/python2.6/dist-packages/django/db/backends/dummy/base.py", line 15, in complain 
raise ImproperlyConfigured("settings.DATABASES is improperly configured. " 
django.core.exceptions.ImproperlyConfigured: settings.DATABASES is improperly configured.Please supply the ENGINE value. Check settings documentation for more details. 

tập tin settings.py tôi trông như thế: -

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 
     'NAME': 'test',      # Or path to database file if using sqlite3. 
     'USER': 'test',      # Not used with sqlite3. 
     'PASSWORD': 'test',     # Not used with sqlite3. 
     'HOST': '',      # Set to empty string for localhost. Not used with sqlite3. 
     'PORT': '',      # Set to empty string for default. Not used with sqlite3. 
    } 
} 

tôi có thể kết nối với cơ sở dữ liệu sử dụng psql OK - bất kỳ ý tưởng? Cảm ơn trước !

+4

Dòng 'DATABASES' trong đầu ra của' ./manage.py diffsettings' trông như thế nào? – okm

+1

DATABASES = {'mặc định': {'ENGINE': 'django.db.backends.', 'NAME': '', 'HOST': '', 'USER': '', 'PASSWORD': '', 'HẢI CẢNG': ''}}. Điều đó có vẻ không chính xác? - làm thế nào điều đó có thể được sửa? – bzo

Trả lời

22

Có thể do django không truy cập vào tệp settings.py mà bạn nghĩ rằng nó sử dụng. Hãy thử một cách rõ ràng chỉ django để cài đặt tập tin của bạn bằng cách sử dụng --settings

./manage.py --settings=nameofproject.settings runserver/syncdb 

Nếu đây hoạt động sau đó, bạn sẽ phải tìm hiểu xem tại sao django đang nhập các tập tin cài đặt sai.

Bạn đã vô tình nâng cấp từ 1,3 lên 1,4?

+2

Cảm ơn - tất cả đã được sửa. Đây là một vấn đề nâng cấp 1,3 -> 1,4. Làm sạch và cài đặt lại django và tất cả đều OK. – bzo

+1

Một mẹo khác là kiểm tra cài đặt của bạn bằng cách sử dụng: echo $ DJANGO_SETTINGS_MODULE - nếu điều này được đặt thành thứ gì đó không mong muốn, điều này có thể gây ra lỗi này. Nếu vậy, bạn có thể kiểm tra thiết lập nó chỉ cho một lệnh này bằng cách sử dụng: DJANGO_SETTINGS_MODULE = nameofproject.settings ./manage.py runserver – RichVel

+0

@ Jason Xin vui lòng cho tôi biết lệnh cho django 1.7 kể từ syncdb không hoạt động trong nó –

3

Tệp settings.py nào bạn đã cập nhật? Tôi đã có vấn đề này chính xác cùng lúc đầu tiên quá khi tôi không đọc về những thay đổi của Django 1,3-1,4 mà nguyên nhân nhập khẩu tăng gấp đôi. Đây là một đoạn trích từ https://docs.djangoproject.com/en/1.4/releases/1.4/#updated-default-project-layout-and-manage-py. Phiên bản mới nhất của Django (hiện tại là 1.4.2) có bố cục dự án mặc định được cập nhật và tệp manage.py cho lệnh quản lý dự án bắt đầu và bố cục dự án mặc định đã thay đổi.

Để khắc phục lỗi, tệp settings.py đúng bạn nên sử dụng KHÔNG phải là tệp trong thư mục dự án chính, nó nằm trong thư mục được tạo bên trong thư mục dự án (có cùng tên).

4

Có hai 'settings.py' tập tin trong dự án của bạn (nếu hệ điều hành của bạn là UNIX-like):

  • Một là trong dir đầu tiên
  • Một là trong dir/dir

Bạn cần phải viết ENGINE đến số thứ hai (dir/dir/setting.py).

Chúc may mắn!

0

Cài đặt lại Django đã thực hiện thủ thuật cho tôi (thực sự xóa tệp trứng), như được đề xuất trong liên kết sau. https://code.djangoproject.com/ticket/18058 Dường như việc nâng cấp từ 1,3 lên 1,4 dường như gây ra rất nhiều vấn đề này.

12

Đối với tôi, tôi đã có một vấn đề tương tự với django 1.6 chỉ là bây giờ:

BỐI CẢNH

Django dự án 1,6 Heroku sử dụng Heroku PostgreSQL cơ sở dữ liệu

tôi muốn phát triển trực tiếp trên máy chủ postgresql (vì vậy đừng sao chép ".postgresql_psycopg2" chút nếu bạn không còn sử dụng postgresql)

  • Không có vấn đề phát triển bằng cách sử dụng db psql địa phương
  • Got lỗi mà khi tôi uncomment dòng sử dụng Heroku db

    DATABASES['default'] = dj_database_url.config(default=os.getenv('DATABASE_URL')) 
    

Nỗ lực ban đầu là thêm các chi tiết khác, chẳng hạn như một dòng khác,

DATABASES['default']['ENGINE'] = 'django.db.backends.postgresql_psycopg2' 

Điều này không hoạt động, bởi vì sau đó lỗi đã hỏi tôi về NAME, điều này bị từ chối.

SOLUTION

Cuối cùng, điều này giải quyết nó:

  1. Tôi chạy "Heroku cấu hình" để xem thông tin chi tiết của tôi trình bày cho tôi trong định dạng:

    postgres://user:[email protected]/dbname 
    
  2. Tôi đã cập nhật tệp settings.py để phản ánh các chi tiết đó:

    DATABASES = { 
        'default': { 
         'ENGINE': 'django.db.backends.postgresql_psycopg2', 
         'NAME': 'your_heroku_db_name',      
         'USER': 'your_heroku_db_user_name', 
         'PASSWORD': 'your_heroku_password', 
         'HOST': 'ec2-23-21-133-106.compute-1.amazonaws.com', # Or something like this 
         'PORT': '5432',      
        } 
    } 
    

    Đó tip là từ https://stackoverflow.com/a/19719966/870121

    Lưu ý: Kế hoạch tiếp theo của tôi là để tóm tắt những trở lại vào biến .env hơn là để lại cho họ nhìn thấy trong settings.py

  3. sau đó tôi nhận xét ra các dòng sau,

    # DATABASES['default'] = dj_database_url.config(default=os.getenv('DATABASE_URL')) 
    

    nên CƠ SỞ DỮ LIỆU được chỉ định lần trong tệp settings.py

    Bằng cách đó các chương trình đọc tất cả mọi thứ cần thiết để kết nối với Heroku postgresql db

    ví dụ, bây giờ python manage.py syncdb đang làm việc cho tôi


Nếu bạn muốn thử phát triển địa phương, nhận xét ra tất cả mọi thứ ở trên và thay vào đó thiết lập máy chủ postgresql cục bộ của bạn và bỏ ghi chú tương đương cục bộ ở trên:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'NAME': 'cool01db', 
     'USER': '', 
     'PASSWORD': '', 
     'HOST': 'localhost', # '127.0.0.1' probably works also 
     'PORT': '5432', 
    } 
} 

Đó là fro m https://stackoverflow.com/a/25962586/870121

+0

cảm ơn, nó rất hữu ích cho tôi! (làm việc tốt trên heroku, nhưng không phải ở địa phương ...) – Hoff

+0

tài liệu heroku quá rộng đến mức khó hiểu – 82din

Các vấn đề liên quan