2012-06-17 33 views
30

Tôi đang cố gắng để có được ứng dụng dj django địa phương của tôi để làm việc sau khi làm theo các hướng dẫn này về việc thêm cài đặt cơ sở dữ liệu env.Cài đặt Cơ sở dữ liệu Heroku Injection - Làm cách nào để thiết lập cơ sở dữ liệu dev django của tôi?

https://devcenter.heroku.com/articles/django-injection

Tôi làm theo các hướng dẫn nhưng nhận được lỗi sau khi ứng dụng của tôi cố gắng truy cập vào cơ sở dữ liệu địa phương

Request Method: GET 
Request URL: http://localhost:8000 
Django Version: 1.4 
Exception Type: ImproperlyConfigured 
Exception Value:  
You need to specify NAME in your Django settings file. 

thiết lập cơ sở dữ liệu của tôi ban đầu,

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'NAME': 'db',      # Or path to database file if using sqlite3. 
     'USER': 'foo',      # Not used with sqlite3. 
     'PASSWORD': 'bar',     # Not used with sqlite3. 
     'HOST': 'localhost',     
     'PORT': '5432', 
    } 
} 

bài viết Heroku nói để thêm nội dung sau vào tệp cài đặt

import dj_database_url 
DATABASES = {'default': dj_database_url.config(default='postgres://localhost')} 

làm cách nào để có được dj_database_url.config để sử dụng cài đặt dev của tôi khi DATABASE_URL không có sẵn trong dev?

Trả lời

38

Bạn có thể chỉ cần thêm các thiết lập dev của bạn với các giá trị mặc định như thế này ...

import dj_database_url 
DATABASES = {'default': dj_database_url.config(default='postgres://foo:[email protected]:5432/db')} 
+1

Làm thế nào để thiết lập động cơ, dường như cần thiết ít nhất cho môi trường địa phương? – GreenAsJade

+0

Nếu bạn xem xét phương thức 'dj_database_url.config', bạn sẽ thấy giá trị ENGINE có nguồn gốc từ sơ đồ của URL cơ sở dữ liệu tức là' postgres: // ' – donturner

+0

Sẽ tốt hơn nếu bạn định nghĩa DATABASE_URL trong một biến môi trường , cấu hình nào() sẽ đọc. – Bill

8

Chỉ cần đặt biến môi trường trên hệ điều hành của bạn và kiểm tra xem có được đặt hay không. Ví dụ, với một hệ thống UNIX:

# In ~/.bash_profile 
export LOCAL_DEV=true 

# In settings.py 
import dj_database_url 
DATABASES = {'default': dj_database_url.config(default='postgres://localhost')} 

if bool(os.environ.get('LOCAL_DEV', False)): 
    # Override DATABASES['default'] with your local database configuration 

Ngoài ra, nếu bạn cần phải set an environment variable trên không gian Heroku của bạn:

heroku config:add MY_VAR='my_value' 
+2

Trên thực tế cú pháp chính xác là 'Heroku cấu hình: thêm MY_VAR =' my_value'' –

+0

Bạn nói đúng :) cảm ơn, tôi sửa chữa nó. –

+0

cấu hình heroku: đặt MY_VAR = 'value' cũng được. add là một bí danh :) – babttz

13

Sử dụng này trong settings.py của bạn:

DATABASES = {'default': dj_database_url.config(default=os.environ['DATABASE_URL'])} 

và trong tập tin .env bạn có điều này:

DATABASE_URL=postgres://localhost/yourdbname 

khi bạn khởi động với "đầu đốc" nó sẽ xem xét các tập tin .env và tạo tất cả những biến môi trường, giống như đang chạy trên Heroku riêng của mình. Nhập "cấu hình heroku" để xác nhận rằng bạn có một bộ DATABASE_URL, bạn nên làm gì nếu bạn đã thêm bộ đệm cơ sở dữ liệu postgres.

+2

Đó là dự phòng để gán 'mặc định' cho DATABASE_URL, là biến môi trường mà cấu hình() lần đọc ... theo mặc định. – Bill

5

Tôi chỉ cố gắng này và đây là mã của tôi:

import dj_database_url 

local_db = 'postgres://django_login:[email protected]/django_db' 
DATABASES = {'default': dj_database_url.config(default=local_db)} 

tên cơ sở dữ liệu của tôi là "django_db", tên người dùng là "django_login", mật khẩu là "123456".

Mã của tôi có thể chạy cả trên máy cục bộ và heroku.

1

nhập khẩu dj_database_url

CƠ SỞ DỮ LIỆU = { 'mặc định': dj_database_url.cấu hình (mặc định = 'postgres: // yourusername: yourpassword @yourhosturl: 5432/yourdbname')}

** Thay thế chuỗi đậm với các thiết lập cơ sở dữ liệu của bạn nếu bạn đang sử dụng địa phương cơ sở dữ liệu sau đó thay thế yourhosturl bởi localhost

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