【问题标题】:Heroku Database Settings Injection - How do I setup my dev django database?Heroku 数据库设置注入 - 如何设置我的 dev django 数据库?
【发布时间】:2012-06-19 18:11:01
【问题描述】:

按照这些关于添加 env 数据库设置的说明后,我正在尝试让我的本地 dev django 应用程序工作。

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

我按照说明操作,但当我的应用尝试访问本地数据库时出现以下错误

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.

我原来的数据库设置,

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

heroku 文章说要在设置文件中添加以下内容

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

当 DATABASE_URL 在 dev 中不可用时,如何让 dj_database_url.config 使用我的 dev 设置?

【问题讨论】:

    标签: django heroku


    【解决方案1】:

    导入 dj_database_url

    数据库 = {'默认': dj_database_url.config(default='postgres://yourusername:yourpassword@yourhosturl:5432/yourdbname') }

    ** 用您的数据库设置替换粗体字符串 如果您使用的是本地数据库,则将 yourhosturl 替换为 localhost

    【讨论】:

      【解决方案2】:

      我刚刚尝试过,这是我的代码:

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

      我的数据库名是“django_db”,用户名是“django_login”,密码是“123456”。

      我的代码可以在本地机器和heroku上运行。

      【讨论】:

        【解决方案3】:

        在你的 settings.py 中使用它:

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

        在你的 .env 文件中有这个:

        DATABASE_URL=postgres://localhost/yourdbname
        

        当您使用“foreman start”启动时,它会查看 .env 文件并创建所有这些环境变量,就像在 Heroku 本身上运行一样。键入“heroku config”以确认您设置了 DATABASE_URL,如果您添加了 postgres 数据库插件,您应该这样做。

        【讨论】:

        • 将'default'分配给DATABASE_URL是多余的,它是config()读取的环境变量……默认情况下。
        【解决方案4】:

        只需在您的操作系统上设置一个环境变量并检查它是否已设置。例如,对于 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
        

        另外,如果您需要在您的 heroku 空间上set an environment variable

        heroku config:add MY_VAR='my_value'
        

        【讨论】:

        • 其实正确的语法是heroku config:add MY_VAR='my_value'
        • heroku config:set MY_VAR='value' 也可以。 add 是一个别名 :)
        【解决方案5】:

        您可以像这样将您的开发设置添加到默认值...

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

        【讨论】:

        • 如何设置引擎,这似乎至少对本地环境是必要的?
        • 如果您看一下dj_database_url.config 方法,您会发现ENGINE 值源自数据库URL 的方案,即postgres://
        • 最好在环境变量中定义 DATABASE_URL,config() 会读取它。
        猜你喜欢
        • 2016-04-12
        • 1970-01-01
        • 2019-10-13
        • 2015-10-11
        • 2013-07-28
        • 2018-06-07
        • 1970-01-01
        • 2012-12-19
        相关资源
        最近更新 更多