2015-04-21 4 views
2

Я пытаюсь развернуть приложение Django в Heroku. Миграции находятся в моем местном Git. Когда я пытаюсь:Ошибка «нет такой таблицы» на Heroku после django syncdb прошла

git push heroku master 
heroku run python manage.py syncdb 

Это относится к миграции, а также promts мне создать суперпользователя, который я успешно сделать. Теперь приложение и работает, однако, когда я пытаюсь войти в Django администратора он бросает:

OperationalError no such table: user_user 

Когда я пытаюсь

heroku run python manage.py makemigrations  
heroku run python manage.py migrate 
heroku run python manage.py createsuperuser 

Он применяет все миграции, но не в состоянии создать суперпользователя бросание:

django.db.utils.OperationalError: no such table: user_user 

В любом случае у меня не может быть установлена ​​и перенесена моя база данных на Heroku.

Мои настройки базы данных являются:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 
    } 
} 

Моя модель пользователя:

class User(AbstractUser): 
    rating = models.PositiveIntegerField(default=settings.DEFAULT_USER_RATING) 

Джанго версия 1.7.1.

Как получить таблицы базы данных, созданные на Heroku?

+0

Я не понимаю ваш вопрос. Вы говорите, что при выполнении миграции выполняется миграция. Ну, сделайте это вместо syncdb, который все равно устарел. –

+0

Я обновил вопрос, чтобы стать более понятным. Проблема заключается не в syncdb и migrate help, устанавливающей db на heroku. Я все еще сталкиваюсь с «никакой такой таблицей: user_user» при попытке войти в администратор Django. –

+0

Возможный дубликат [Героку создал таблицу, но когда я буду мигрировать, он говорит, что не создан] (http://stackoverflow.com/questions/15467389/heroku-created-table-but-when-ill-migrate- он-говорит-что-не-создал) –

ответ

5

Вы не должны использовать sqlite3 на Heroku.

sqlite хранит базу данных в виде файла на диске. Но файловая система в динамике Heroku не является постоянной и не делится между динамиками. Итак, когда вы делаете heroku run python manage.py migrate, Heroku запускает новый дино с пустой базой данных, запускает миграции, а затем удаляет dyno и базу данных. Динамик, на котором запущен ваш сайт, не подвержен влиянию и никогда не переносится.

Необходимо использовать одну из дополнений базы данных Heroku. Для Postgres существует бесплатный уровень. Вы должны использовать библиотеку dj-database-url, чтобы динамически устанавливать параметры базы данных из переменных среды, которые устанавливает Heroku.

Кроме того, по этой же причине вы должны сделать manage.py makemigrations локально, передать результат git, а затем нажать на Heroku.

+0

Теперь я вижу. Спасибо, Дэниэл. –

+0

Подробные инструкции по его запуску: http://stackoverflow.com/a/37211806/895245 –

0

Какую версию django вы используете ..?

Если вы используете Джанго> = 1.7 нужно запустить migrate

После добавления модели вам нужно сделать python manage.py makemigrations затем python manage.py migrate

Если ваш проект уже содержит миграцию вы можете непосредственно запустить python manage.py migrate команды.

Если вы пропустите какой-либо шаг, упомянутый выше, сделайте это.

+0

Версия Django - 1.7.1. Я обновил текст вопроса - migrate применяет миграцию, однако после этого создается afteruperuser. –

2

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

В settings.py добавить (в конце файла):

# ie if Heroku server 
if 'DATABASE_URL' in os.environ: 
    import dj_database_url 
    DATABASES = {'default': dj_database_url.config()} 

В requirements.txt добавить:

dj-database-url 
psycopg2 

Теперь вы можете запустить: heroku run python manage.py migrate

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