Difficulté à installer Django sur Heroku en utilisant South-keep getting ProgrammingError: la relation n'existe pas

voici ce que j'ai fait:

localement-où j'ai une toute nouvelle base de données postgres, et deux models.py fichiers de deux applications différentes:

python manage.py syncdb
python manage.py schemamigration api --initial
python manage.py schemamigration extapi --initial
python manage.py migrate api 0001 --fake
python manage.py migrate extapi 0001 --fake

cela fonctionne très bien, et je peux ajouter des choses à la base de données très bien.

puis, en poussant vers Heroku, où j'ai déjà créé une application vide:

git add .
git commit -m "Ready to go to Heroku"
git push heroku master
heroku run python manage.py syncdb

Qui affiche ceci:

Running `python manage.py syncdb` attached to terminal... up, run.9548
Syncing...
Creating tables ...
Creating table django_admin_log
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_groups
Creating table auth_user_user_permissions
Creating table auth_user
Creating table django_content_type
Creating table django_session
Creating table south_migrationhistory

# create superuser prompt...
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)

Synced:
 > django.contrib.admin
 > django.contrib.auth
 > django.contrib.contenttypes
 > django.contrib.sessions
 > django.contrib.messages
 > django.contrib.staticfiles
 > south
 > rest_framework

Not synced (use migrations):
 - api
 - extapi

Ensuite, j'essaie de migrer ces applications avec heroku run python manage.py migrate et obtenir ce erreur:

Running `python manage.py migrate` attached to terminal... up, run.3724
Running migrations for api:
 - Migrating forwards to 0001_initial.
 > api:0001_initial
FATAL ERROR - The following SQL query failed: ALTER TABLE "api_song" ADD CONSTRAINT "summary_id_refs_id_36bb6e06" FOREIGN KEY ("summary_id") REFERENCES "extapi_summary" ("id") DEFERRABLE INITIALLY DEFERRED;
The error was: relation "extapi_summary" does not exist

Error in migration: api:0001_initial
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
    utility.execute()
  File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 392, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/base.py", line 242, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/base.py", line 285, in execute
    output = self.handle(*args, **options)
  File "/app/.heroku/python/lib/python2.7/site-packages/south/management/commands/migrate.py", line 111, in handle
    ignore_ghosts = ignore_ghosts,
  File "/app/.heroku/python/lib/python2.7/site-packages/south/migration/__init__.py", line 220, in migrate_app
    success = migrator.migrate_many(target, workplan, database)
  File "/app/.heroku/python/lib/python2.7/site-packages/south/migration/migrators.py", line 254, in migrate_many
    result = migrator.__class__.migrate_many(migrator, target, migrations, database)
  File "/app/.heroku/python/lib/python2.7/site-packages/south/migration/migrators.py", line 329, in migrate_many
    result = self.migrate(migration, database)
  File "/app/.heroku/python/lib/python2.7/site-packages/south/migration/migrators.py", line 133, in migrate
    result = self.run(migration, database)
  File "/app/.heroku/python/lib/python2.7/site-packages/south/migration/migrators.py", line 114, in run
    return self.run_migration(migration, database)
  File "/app/.heroku/python/lib/python2.7/site-packages/south/migration/migrators.py", line 85, in run_migration
    south.db.db.execute_deferred_sql()
  File "/app/.heroku/python/lib/python2.7/site-packages/south/db/generic.py", line 318, in execute_deferred_sql
    self.execute(sql)
  File "/app/.heroku/python/lib/python2.7/site-packages/south/db/generic.py", line 282, in execute
    cursor.execute(sql, params)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/db/backends/util.py", line 53, in execute
    return self.cursor.execute(sql, params)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/db/utils.py", line 99, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/db/backends/util.py", line 53, in execute
    return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: relation "extapi_summary" does not exist

pour moi, on dirait que les tables ne sont même pas créées, mais je n'ai aucune idée pourquoi pas. Quand je run heroku run python manage.py sqlall il dit que tout a été fait, mais ensuite je regarde la base de données elle-même (celle d'heroku sur s3) il n'y a rien d'app_one et d'app_two. Encore une fois, tout fonctionne parfaitement localement, c'est juste quand ça monte sur heroku que les choses s'effondrent.

14
demandé sur Andrew Konoff 2014-03-07 01:09:37

2 réponses

il y a une importation circulaire qui aurait dû être traitée en reportant simplement la création de api_userprofile, mais à cause de la façon dont South gère les transactions, elle casse.

Donc! La façon la plus simple de faire ce travail est d'obtenir syncdb pour faire toutes les tables et juste truquer la migration:

python manage.py syncdb --all

Qui nous permet d'obtenir:

Synced:
 > django.contrib.admin
 > django.contrib.auth
 > django.contrib.contenttypes
 > django.contrib.sessions
 > django.contrib.messages
 > django.contrib.staticfiles
 > api
 > extapi
 > moodranker
 > recommender
 > south
 > rest_framework

Not synced (use migrations):
 - 

puis truquer les migrations:

python manage.py migrate --fake
21
répondu Andrew Konoff 2014-03-07 19:06:34

supprimez votre dossier migrations et ensuite faites

python manage.py makemigrations appname

python manage.py migrate --run-syncdb

python manage.py migrate --fake appname
2
répondu Shinto Joseph 2017-06-02 04:48:36