2014-10-20 47 views
1
  1. 我有一個本地運行的Django 1.7應用程序的一些測試,連接 到MySQL
  2. 我配置特拉維斯CI與此回購

問題:配置數據庫中settings.py部分特拉維斯CI

  • 我想必須有特拉維斯 - 一個單獨的數據庫,也就是從我使用的一個發展不同。我嘗試在settings.py中添加單獨的設置:默認(用於測試)和開發(用於開發盒);並認爲.travis.xml將在運行遷移任務時使用「默認」。

但特拉維斯CI錯誤出與error : django.db.utils.OperationalError: (1045, "Access denied for user 'sajay'@'localhost' (using password: YES)")

我不知道爲什麼它試圖訪問我的開發數據庫的設置?我檢查了django1.7文檔,搜索了一下但沒有運氣。

得到任何幫助, 感謝

我的settings.py數據庫部分看起來像下面:

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

注意:當 '發展' 部分評論,特拉維斯CI構建綠色

我.travis.yml粘貼如下:

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 
+0

參考下面的django1.7多個db設置鏈接:https://docs.djangoproject.com/en/1.7/topics/db/multi-db/ – sajay 2014-10-20 14:30:50

回答

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 

編輯:

現在有一個環境變量默認情況下,特拉維斯建設時設置。 使用這個環境變量,我們可以更簡單地解決問題:

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文件中的環境變量自己。

+0

注意'BUILD_ON_TRAVIS'不是一個有效的環境var根據https://docs.travis-ci.com/user/environment-variables/。應該只是'TRAVIS'。 – shacker 2016-05-23 22:53:56

+0

@shacker,在使用它之前,我在'.travis.yml'文件中定義了環境變量。感謝您指出,現在定義了一個環境變量'TRAVIS',因爲它可以更輕鬆地解決這個問題。我編輯來反映這一點。 – shuttle87 2016-05-24 15:11:21