如何在 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_appcreate_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

通常,真正的导入错误的描述性足以找到修复。