问题:
我想要为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}}
答案 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?,但没有得到明确的答案。感谢