在settings.py中为Travis CI配置数据库部分

时间:2014-10-20 14:18:09

标签: django travis-ci

  1. 我有一个本地运行的Django 1.7应用程序,有一些测试,连接 到MySQL
  2. 我使用此回购配置了Travis CI
  3. 问题:

    • 我想要为Travis建立一个单独的数据库,这与我用于开发的数据库不同。

    • 我尝试在settings.py中添加单独的设置:默认(用于测试)和开发(用于开发框);并且当.travis.xml运行迁移任务时,error : django.db.utils.OperationalError: (1045, "Access denied for user 'sajay'@'localhost' (using password: YES)")会使用'default'。

    但Travis CI错误地使用了DATABASES = { 'default': { 'ENGINE':'django.db.backends.mysql', 'NAME':'expenses_db', 'USER':'root', 'PASSWORD':'', 'HOST':'127.0.0.1', 'PORT':'3306', }, # 'development': { # 'ENGINE':'django.db.backends.mysql', # 'NAME':'myapp_db', # 'USER':'sajay', # 'PASSWORD':'secret', # 'HOST':'127.0.0.1', # 'PORT':'3306', # }, }

    我不知道它为什么要尝试访问我的开发数据库设置?我检查了django1.7文档,用Google搜索但没有运气。

    感谢任何帮助, 感谢

    我的settings.py数据库部分如下所示:

    language: python
    
    services:
    - mysql
    
    python:
    - "2.7"
    
    env:
    - DJANGO_VERSION=1.7 DB=mysql
    
    install:
    - pip install -r requirements.txt
    - pip install mysql-python
    
    before_script:
    - mysql -e 'create database IF NOT EXISTS myapp_db;' -uroot
    - mysql -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';" -uroot
    - python manage.py migrate
    
    
    script:
    - python manage.py test
    

    注意:评论“开发”部分时,Travis CI构建为绿色

    我的.travis.yml粘贴在下面:

    {{1}}

2 个答案:

答案 0 :(得分:3)

您遇到的问题是因为您没有为Travis CI获得正确的数据库名称和设置。首先,您需要在Travis和项目之间分离设置。为此,我使用了一个名为BUILD_ON_TRAVIS的环境变量(如果您愿意,也可以使用不同的设置文件)。

settings.py

import os

#Use the following live settings to build on Travis CI
if os.getenv('BUILD_ON_TRAVIS', None):
    SECRET_KEY = "SecretKeyForUseOnTravis"
    DEBUG = False
    TEMPLATE_DEBUG = True

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'travis_ci_db',
            'USER': 'travis',
            'PASSWORD': '',
            'HOST': '127.0.0.1',
        }
    }
else:
    #Non-travis DB configuration goes here

然后,在.travis.yml部分的before_script文件中,您需要使用与DATABASES设置中相同的数据库名称。然后我们只需要在.travis.yml文件中设置环境变量,如下所示:

env:
  global:
     - BUILD_ON_TRAVIS=true
  matrix:
     - DJANGO_VERSION=1.7 DB=mysql

编辑:

现在,在Travis上构建时,默认设置了一个环境变量。 使用这个环境变量我们可以更简单地解决问题:

settings.py

import os

#Use the following live settings to build on Travis CI
if os.getenv('TRAVIS', None):
    #Travis DB configuration goes here
else:
    #Non-Travis DB configuration goes here

这样做是可取的,因为我们不再需要在.travis.yml文件中自己定义环境变量。

答案 1 :(得分:0)

按照http://www.slideshare.net/jacobian/the-best-and-worst-of-django中建议的方法分隔不同环境的设置

我检查了How to manage local vs production settings in Django?,但没有得到明确的答案。感谢