web-dev-qa-db-fra.com

Difficulté à installer Django sur Heroku avec South - continuez à obtenir ProgrammingError: la relation n'existe pas

C'est ce que j'ai fait:

Localement - où j'ai une toute nouvelle base de données postgres et deux fichiers models.py 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 bien, et je peux très bien ajouter des éléments à la base de données.

Ensuite, lors de l'envoi de 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

Cela donne 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 j'obtiens cette 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, il semblerait que les tables ne soient tout simplement pas créées, mais je ne sais pas pourquoi. Lorsque je lance heroku run python manage.py sqlall, il est indiqué que tout a été créé, mais ensuite, si je regarde la base de données elle-même (celle que heroku crée sur s3), rien ne se trouve dans app_one et app_two. Encore une fois, tout fonctionne parfaitement localement, c’est juste au moment où le problème se dégrade que les choses se détériorent.

14
Andrew Konoff

Il y a une importation circulaire qui aurait dû être gérée en différant simplement la création de api_userprofile, mais à cause de la façon dont South gère les transactions, cela se rompt.

Alors! La façon la plus simple de faire ce travail est d’obtenir syncdb pour créer toutes les tables et simuler la migration:

python manage.py syncdb --all

Cela nous amène:

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 simulons les migrations:

python manage.py migrate --fake
21
Andrew Konoff

Supprimez votre dossier de migration puis faites

python manage.py makemigrations appname

python manage.py migrate --run-syncdb

python manage.py migrate --fake appname
0
Shinto Joseph