如何在 Travis 的测试文件中使用 运行 管理命令?
How to run management command in test file on Travis?
在我的一个测试文件中,我调用了 Django 管理命令:
def setUpModule():
management.call_command('loaddata', 'frontend/fixtures/chemicals.json',
verbosity=0)
management.call_command('create_indexes_and_matviews',
db_name, db_user, db_pass,
verbosity=2)
这个测试 运行 当我 运行 在本地使用 manage.py test
时它很好。
但是,在 Travis 上我得到这个错误:
======================================================================
ERROR: setUpModule (frontend.tests.test_api_views)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/travis/build/.../frontend/tests/test_api_views.py", line 35, in setUpModule
verbosity=2)
File "/home/travis/virtualenv/python2.7.9/lib/python2.7/site-packages/django/core/management/__init__.py", line 95, in call_command
raise CommandError("Unknown command: %r" % name)
CommandError: Unknown command: 'create_indexes_and_matviews'
如何让 Travis 知道该命令?
这是我的 Travis 文件:
language: python
python:
- "2.7"
addons:
postgresql: "9.3"
env:
- SECRET_KEY=test DB_NAME=dbtest DB_USER=test DB_PASS=test
before_install:
- export DJANGO_SETTINGS_MODULE=....settings.local
- export PYTHONPATH=$HOME/builds/...
install:
- pip install -r requirements.txt
- pip install -r requirements/local.txt
before_script:
- psql -U postgres -c 'CREATE DATABASE dbtest;'
- psql -U postgres -c "CREATE EXTENSION postgis" -d dbtest
- psql -U postgres -c "CREATE EXTENSION postgis_topology" -d dbtest
- psql -U postgres -c "CREATE USER test WITH CREATEUSER PASSWORD 'test';"
- psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE dbtest to test;"
- psql -U postgres -c "ALTER USER test CREATEDB;"
- cd frontend && python manage.py migrate
script:
- python manage.py test
有什么我应该添加的,以便它知道在哪里可以找到管理命令吗?
根据我的实践,我知道造成这种问题的原因有两个。
A. 没有 the_app
和 create_indexes_and_matviews
列在 settings.INSTALLED_APPS
中(它可能被遗漏,排除在 if/else 或try/except魔法)
要检查实际设置,请尝试将以下命令添加到 Travis 文件
echo "from django.conf import settings;print(settings.INSTALLED_APPS)" | python manage.py shell
B. 缺少应用依赖项。尝试使用以下命令在 travis 上获取实际错误:
echo "from the_app.management.commands.create_indexes_and_matviews import Command" | python manage.py shell
通常,真正的导入错误的描述性足以找到修复。
在我的一个测试文件中,我调用了 Django 管理命令:
def setUpModule():
management.call_command('loaddata', 'frontend/fixtures/chemicals.json',
verbosity=0)
management.call_command('create_indexes_and_matviews',
db_name, db_user, db_pass,
verbosity=2)
这个测试 运行 当我 运行 在本地使用 manage.py test
时它很好。
但是,在 Travis 上我得到这个错误:
======================================================================
ERROR: setUpModule (frontend.tests.test_api_views)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/travis/build/.../frontend/tests/test_api_views.py", line 35, in setUpModule
verbosity=2)
File "/home/travis/virtualenv/python2.7.9/lib/python2.7/site-packages/django/core/management/__init__.py", line 95, in call_command
raise CommandError("Unknown command: %r" % name)
CommandError: Unknown command: 'create_indexes_and_matviews'
如何让 Travis 知道该命令?
这是我的 Travis 文件:
language: python
python:
- "2.7"
addons:
postgresql: "9.3"
env:
- SECRET_KEY=test DB_NAME=dbtest DB_USER=test DB_PASS=test
before_install:
- export DJANGO_SETTINGS_MODULE=....settings.local
- export PYTHONPATH=$HOME/builds/...
install:
- pip install -r requirements.txt
- pip install -r requirements/local.txt
before_script:
- psql -U postgres -c 'CREATE DATABASE dbtest;'
- psql -U postgres -c "CREATE EXTENSION postgis" -d dbtest
- psql -U postgres -c "CREATE EXTENSION postgis_topology" -d dbtest
- psql -U postgres -c "CREATE USER test WITH CREATEUSER PASSWORD 'test';"
- psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE dbtest to test;"
- psql -U postgres -c "ALTER USER test CREATEDB;"
- cd frontend && python manage.py migrate
script:
- python manage.py test
有什么我应该添加的,以便它知道在哪里可以找到管理命令吗?
根据我的实践,我知道造成这种问题的原因有两个。
A. 没有 the_app
和 create_indexes_and_matviews
列在 settings.INSTALLED_APPS
中(它可能被遗漏,排除在 if/else 或try/except魔法)
要检查实际设置,请尝试将以下命令添加到 Travis 文件
echo "from django.conf import settings;print(settings.INSTALLED_APPS)" | python manage.py shell
B. 缺少应用依赖项。尝试使用以下命令在 travis 上获取实际错误:
echo "from the_app.management.commands.create_indexes_and_matviews import Command" | python manage.py shell
通常,真正的导入错误的描述性足以找到修复。