2010-11-18 3 views
17

новеллы

Я бег ./manage.py schemamigration junk_app --initial на совершенно свежий проект Джанго сразу после установки свежа Юга (http://south.aeracode.org/), и я получаю следующее сообщение об ошибке:Джанго юг новая установки -> ошибка: неизвестная команда «schemamigration»

Unknown command: 'schemamigration' 
Type 'manage.py help' for usage. 

EDIT: у меня есть версия +0,7 (юг/init.py имеет версию =»+0,07")

длинная история

Ниже почти буквальное копирование/вставка из того, что только что произошло:

$ sudo apt-get install python-django-south 
$ django-admin.py startproject junk_proj 
$ cd junk_proj 
$ ./managy.py startapp junk_app 
$ vim settings.py #add 'south' to INSTALLED_APPS 

.

$ cat settings.py 
# Django settings for junk_proj project. 

DEBUG = True 
TEMPLATE_DEBUG = DEBUG 

ADMINS = (
    # ('Your Name', '[email protected]'), 
) 

MANAGERS = ADMINS 

import os 
CWD = os.getcwd() 
DATABASE_ENGINE = 'sqlite3'   # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 
DATABASE_NAME = CWD+'/db'    # Or path to database file if using sqlite3. 
DATABASE_USER = ''    # Not used with sqlite3. 
DATABASE_PASSWORD = ''   # Not used with sqlite3. 
DATABASE_HOST = ''    # Set to empty string for localhost. Not used with sqlite3. 
DATABASE_PORT = ''    # Set to empty string for default. Not used with sqlite3. 

# Local time zone for this installation. Choices can be found here: 
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name 
# although not all choices may be available on all operating systems. 
# If running in a Windows environment this must be set to the same as your 
# system time zone. 
TIME_ZONE = 'America/Chicago' 

# Language code for this installation. All choices can be found here: 
# http://www.i18nguy.com/unicode/language-identifiers.html 
LANGUAGE_CODE = 'en-us' 

SITE_ID = 1 

# If you set this to False, Django will make some optimizations so as not 
# to load the internationalization machinery. 
USE_I18N = True 

# Absolute path to the directory that holds media. 
# Example: "/home/media/media.lawrence.com/" 
MEDIA_ROOT = '' 

# URL that handles the media served from MEDIA_ROOT. Make sure to use a 
# trailing slash if there is a path component (optional in other cases). 
# Examples: "http://media.lawrence.com", "http://example.com/media/" 
MEDIA_URL = '' 

# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a 
# trailing slash. 
# Examples: "http://foo.com/media/", "/media/". 
ADMIN_MEDIA_PREFIX = '/media/' 

# Make this unique, and don't share it with anybody. 
SECRET_KEY = 'vgtm!i0*(qn$8m9&0u_)#(5yh(kt8%+4dlwfum%xtt-$1ge+ld' 

# List of callables that know how to import templates from various sources. 
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.load_template_source', 
    'django.template.loaders.app_directories.load_template_source', 
#  'django.template.loaders.eggs.load_template_source', 
) 

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
) 

ROOT_URLCONF = 'junk_proj.urls' 

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". 
    # Always use forward slashes, even on Windows. 
    # Don't forget to use absolute paths, not relative paths. 
) 

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'south', 
    'junk_app', 
) 

.

$ ./managy.py syncdb 
Creating table auth_permission 
Creating table auth_group 
Creating table auth_user 
Creating table auth_message 
Creating table django_content_type 
Creating table django_session 
Creating table django_site 
Creating table south_migrationhistory 

You just installed Django's auth system, which means you don't have any superusers defined. 
Would you like to create one now? (yes/no): yes 
Username (leave blank to use 'foo'): admin 
E-mail address: [email protected] 
Password: 
Password (again): 
Superuser created successfully. 
Installing index for auth.Permission model 
Installing index for auth.Message model 

synced: 
> django.contrib.auth 
> django.contrib.contenttypes 
> django.contrib.sessions 
> django.contrib.sites 
> south 
> junk_app 

Not synced (use migrations): 
- 
(use ./manage.py migrate to migrate these) 
$ 
$./manage.py schemamigration junk_app --initial 
Unknown command 'schemamigration' 
Type 'manage.py help' for usage 
$ 
+1

В какой версии Юга вы были загружены? 'schemamigration' не отображался в более ранних версиях. Что вы получаете, когда вводите './Manage.py' без аргументов? –

+0

'Доступные Подкоманды: очистки compilemessages convert_to_south createcachetable createsuperuser dbshell diffsettings dumpdata вровень inspectdb LoadData makemessages мигрируют сброса runfcgi runserver оболочки SQL sqlall sqlclear sqlcustom sqlflush sqlindexes sqlinitialdata sqlreset sqlsequencereset StartApp startmigration SyncDB тест TestServer проверки ' –

+1

Я бы не рекомендовал использовать' apt-get' для такого рода вещи. Ничто в вашей ОС не зависит от Юга, поэтому нет причин связывать себя с тем, какая старая версия была упакована для вашей ОС. Вместо этого используйте 'pip'. –

ответ

8

Возможно, вы используете старую южную версию 0.6.x или даже 0.5.x. Если вы наберете «./manage.py help», вы увидите startmigration (iirc) в списке доступных команд.

+1

Кроме того, в 0.7 'startmigration' был разделен на' schemamigration' и 'datamigration'. Не было реального эквивалента для 'datamigration' в более ранних версиях; вам пришлось выполнить «startmigration», а затем заменить код миграции самостоятельно. –

+0

Как узнать, какая версия Юга у меня есть? Я вижу только параметр startmigration при вводе справки ./manage.py, но это не имеет смысла, потому что я только что установил через apt-get на машине Ubuntu 10 (я никогда не редактировал исходный файл). Как я могу использовать устаревшую версию Юга и как я могу официально найти версию, которую я имею? –

+0

startmigration работал, кстати, но мне все же хотелось бы знать версию, которую я использую. –

4

Вместо использования пакета Ubuntu используйте easy_install или pip для установки на юг. Это обеспечит вам самую последнюю версию.

35

Возможно, вы не добавили «юг» в список INSTALLED_APPS вашего файла settings.py.

Вот цитата из http://south.aeracode.org/docs/installation.html#installation-configure

Now you’ve installed South system-wide, you’ll need to configure Django to use it. Doing so is simple; just edit your settings.py and add 'south' to the end of INSTALLED_APPS.

If Django doesn’t seem to pick this up, check that you’re not overriding INSTALLED_APPS elsewhere, and that you can run import south from inside ./manage.py shell with no errors.

Once South is added in, you’ll need to run ./manage.py syncdb to make the South migration-tracking tables (South doesn’t use migrations for its own models, for various reasons).

+0

Добавление «юг» в список INSTALLED_APPS спасло мой день :-) Спасибо. – Hartmut

+0

Я добавил '' юг ', 'до конца моего INSTALLED_APPS, и он все еще не распознается. Есть идеи? Я использую virtualenv в Windows 7. – aldo

+1

Эта часть важна! 'Если Django, похоже, не заберет это, убедитесь, что вы не переопределяете INSTALLED_APPS в другом месте, и что вы можете запустить импорт на юг изнутри ./manage.py оболочки без ошибок.' – nicorellius

1

чек, который settings.py файл, который вы используете:

./manage.py shell 
import settings 
settings.__file__ 

вы можете увидеть в manage.py, какие настройки файла Django использовать по defaul:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "app.settings") 

или вы можете использовать:

$./manage.py schemamigration junk_app --settings=settings --initial 

вместо:

$./manage.py schemamigration junk_app --initial 
1

Если у Вас есть свои настройки в папке настроек, убедитесь, что вы используете . и не / в пути. Пример: ./manage.py schemamigration secretballot --initial --settings=settings.jacob

3

Я думаю, что эта проблема может быть очень неуловимой. Я потратил немало времени, и тогда я понял, что я переоцениваю INSTALLED_APPS для некоторых тестов. Doh! Так что это ключ. Обязательно добавьте south в конце вашего INSTALLED_APPS, и если вы переопределите его, проверьте это тоже.

Смежные вопросы