?

Log in

No account? Create an account
 
 
28 Декабрь 2015 @ 19:35
Загадочная ошибка при инициализации mysql'ной базы  
Есть такой блоговый движок - Zinnia. Со стандартными настройками всё нормально. А вот после добавления их же собственного приложения zinnia_threaded_comments при запуске manage.py syncdb или migrate вылетает идиотская ошибка:
Synchronizing apps without migrations:
  Creating tables...
    Creating table zinnia_threaded_comments_threadedcomment
    Running deferred SQL...
Traceback (most recent call last):
  File "manage.py", line 10, in 
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 330, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 390, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 441, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/migrate.py", line 179, in handle
    created_models = self.sync_apps(connection, executor.loader.unmigrated_apps)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/migrate.py", line 317, in sync_apps
    cursor.execute(statement)
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py", line 79, in execute
    return super(CursorDebugWrapper, self).execute(sql, params)
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python2.7/dist-packages/django/db/utils.py", line 97, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py", line 62, in execute
    return self.cursor.execute(sql)
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/mysql/base.py", line 124, in execute
    return self.cursor.execute(query, args)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 174, in execute
    self.errorhandler(self, exc, value)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
    raise errorclass, errorvalue
django.db.utils.OperationalError: (1005, "Can't create table 'blogdb.#sql-b6b_aa70' (errno: 150)")


Откуда это #sql-b6b_aa70 берётся?!

Самое интересное, что таблица zinnia_threaded_comments_threadedcomment таки создаётся. И django_migrations тоже. А больше ничего, потому что на этом месте manage ломается.

Куда копать?

P.S. Питон 2.7, Django 1.8 (1.9 Zinnia не поддерживает). Сама zinnia 0.15.2 (как пипом поставилась).
 
 
 
МалЪчик: МалЪчикmordaha on Январь, 5, 2016 15:12 (UTC)
Еггог 150 это скорее всего значит что таблицы на которую ссылается констраинт вновь создаваемой как на форин кей отсутствует.
Смотри migrations/* внутри этого аппа, смотри sql который миграция генерит, там еще south двухлетней давности.


Можно сделать ugly hack и вонзить в manage.py SQL: SET FOREIGN_KEY_CHECKS = 0;

You  never  can  tell  with beesdil on Январь, 7, 2016 21:58 (UTC)
Именно так и оказалось. В этой таблице присутствует foreign key, который ссылается на django_comments.id.
Хотя приложение django_comments в INSTALLED_APPS указано перед zinnia_threaded_comments, но похоже, это не влияет на порядок создания таблиц. А вот dependencies в его Migration вписать забыли..

Проблема решилась довольно просто: сначала запускаем migrate без этого приложения, отрабатывает нормально. Потом добавляем приложение, и migrate успешно создаёт всё, что надо.

amaraoamarao_san on Январь, 5, 2016 16:04 (UTC)
Если что, вот тут тоже люди страдают: http://stackoverflow.com/questions/7366528/djangos-syncdb-fails-with-mysql-errno-150
You  never  can  tell  with beesdil on Январь, 7, 2016 22:07 (UTC)
Здесь оказалась несколько другая проблема, foreign key пытался создаться на таблицу, которая ещё не была создана, потому что в Migration забыли указать dependencies.
Phil Kulinschors on Январь, 5, 2016 21:24 (UTC)
"#sql-b6b_aa70" - это так MySQL временные таблицы называет
You  never  can  tell  with beesdil on Январь, 6, 2016 12:46 (UTC)
Но там же написано Creating table zinnia_threaded_comments_threadedcomment, и эта таблица таки создалась. Зачем могла использоваться эта временная таблица, которая не создалась?