heifetz
heifetz

Reputation: 353

Heroku Database Settings Injection - How do I setup my dev django database?

I'm trying to get my local dev django app to work after following these instructions on adding env database settings.

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

I followed the instructions but get the following error when my app tries to access the local database

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.

My database settings originally,

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',
    }
}

the heroku article says to add the following to the settings file

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

how do I get dj_database_url.config to use my my dev settings when the DATABASE_URL is not available in dev?

Upvotes: 30

Views: 14712

Answers (5)

Naveen Agarwal
Naveen Agarwal

Reputation: 1036

import dj_database_url

DATABASES = {'default': dj_database_url.config(default='postgres://yourusername:yourpassword@yourhosturl:5432/yourdbname')}

** Replace bold string with your database settings if you are using local database then replace yourhosturl by localhost

Upvotes: 1

ming.kernel
ming.kernel

Reputation: 3665

I just tried this and here is my code:

import dj_database_url

local_db = 'postgres://django_login:123456@localhost/django_db'
DATABASES = {'default': dj_database_url.config(default=local_db)}

My database name is "django_db", user name is "django_login", password is "123456".

My code can run both in local machine and heroku.

Upvotes: 5

user712225
user712225

Reputation: 139

Use this in your settings.py:

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

and in your .env file have this:

DATABASE_URL=postgres://localhost/yourdbname

when you launch with "foreman start" it will look at the .env file and create all those environment variables, just like running on Heroku itself. Type "heroku config" to confirm that you have a DATABASE_URL set, which you should if you added the postgres database addon.

Upvotes: 13

ldiqual
ldiqual

Reputation: 15365

Just set an environment variable on your operating system and check weither or not it's set. For instance, with a UNIX system:

# 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

Also, if you need to set an environment variable on your heroku space:

heroku config:add MY_VAR='my_value'

Upvotes: 8

kyen99
kyen99

Reputation: 535

You can just add your dev settings to the default values like this...

import dj_database_url
DATABASES = {'default': dj_database_url.config(default='postgres://foo:bar@localhost:5432/db')}

Upvotes: 39

Related Questions