bupy7 / yii2-pages

Module implements CRUD with static pages with uses Imperavi Redactor.
BSD 3-Clause "New" or "Revised" License
15 stars 23 forks source link

Migration failed #18

Closed i-panov closed 5 years ago

i-panov commented 5 years ago
Total 2 new migrations to be applied:
        m150429_155009_create_page_table
        m180927_200917_add_display_title

*** applying m150429_155009_create_page_table
    > create table {{%pages}} ... done (time: 0.151s)
    > create unique index pages_idx_1 on {{%pages}} (alias) ... done (time: 0.091s)
    > create index pages_idx_2 on {{%pages}} (alias,published) ... done (time: 0.132s)
*** applied m150429_155009_create_page_table (time: 0.392s)

*** applying m180927_200917_add_display_title
    > add column display_title boolean DEFAULT 1 to table {{%pages}} ... done (time: 0.261s)
Exception: SQLSTATE[42000]: Syntax error or access violation: 1305 SAVEPOINT LEVEL1 does not exist
The SQL being executed was: RELEASE SAVEPOINT LEVEL1 (\vendor\yiisoft\yii2\db\Schema.php:664)
#0 \vendor\yiisoft\yii2\db\Command.php(1295): yii\db\Schema->convertException(Object(PDOException), 'RELEASE SAVEPOI...')
#1 \vendor\yiisoft\yii2\db\Command.php(1091): yii\db\Command->internalExecute('RELEASE SAVEPOI...')
#2 \vendor\yiisoft\yii2\db\Schema.php(398): yii\db\Command->execute()
#3 \vendor\yiisoft\yii2\db\Transaction.php(172): yii\db\Schema->releaseSavepoint('LEVEL1')
#4 \vendor\yiisoft\yii2\db\Migration.php(118): yii\db\Transaction->commit()
#5 \vendor\yiisoft\yii2\console\controllers\BaseMigrateController.php(725): yii\db\Migration->up()
#6 \vendor\yiisoft\yii2\console\controllers\BaseMigrateController.php(199): yii\console\controllers\BaseMigrateController->migrateUp('m180927_200917_...')
#7 [internal function]: yii\console\controllers\BaseMigrateController->actionUp(0)
#8 \vendor\yiisoft\yii2\base\InlineAction.php(57): call_user_func_array(Array, Array)
#9 \vendor\yiisoft\yii2\base\Controller.php(157): yii\base\InlineAction->runWithParams(Array)
#10 \vendor\yiisoft\yii2\console\Controller.php(148): yii\base\Controller->runAction('up', Array)
#11 \vendor\yiisoft\yii2\base\Module.php(528): yii\console\Controller->runAction('up', Array)
#12 \vendor\yiisoft\yii2\console\Application.php(180): yii\base\Module->runAction('migrate/up', Array)
#13 \migrations\m180425_074410_init.php(37): yii\console\Application->runAction('migrate/up', Array)
#14 \vendor\yiisoft\yii2\db\Migration.php(114): m180425_074410_init->safeUp()
#15 \vendor\yiisoft\yii2\console\controllers\BaseMigrateController.php(725): yii\db\Migration->up()
#16 \vendor\yiisoft\yii2\console\controllers\BaseMigrateController.php(199): yii\console\controllers\BaseMigrateController->migrateUp('m180425_074410_...')
#17 [internal function]: yii\console\controllers\BaseMigrateController->actionUp(1)
#18 \vendor\yiisoft\yii2\base\InlineAction.php(57): call_user_func_array(Array, Array)
#19 \vendor\yiisoft\yii2\base\Controller.php(157): yii\base\InlineAction->runWithParams(Array)
#20 \vendor\yiisoft\yii2\console\Controller.php(148): yii\base\Controller->runAction('up', Array)
#21 \vendor\yiisoft\yii2\base\Module.php(528): yii\console\Controller->runAction('up', Array)
#22 \vendor\yiisoft\yii2\console\Application.php(180): yii\base\Module->runAction('migrate/up', Array)
#23 \vendor\yiisoft\yii2\console\Application.php(147): yii\console\Application->runAction('migrate/up', Array)
#24 \vendor\yiisoft\yii2\base\Application.php(386): yii\console\Application->handleRequest(Object(yii\console\Request))
#25 \yii(20): yii\base\Application->run()
#26 {main}
*** failed to apply m180927_200917_add_display_title (time: 0.273s)

1 from 2 migration was applied.
bupy7 commented 5 years ago

What version of Yii2, PHP and what kind of database?

i-panov commented 5 years ago

What version of Yii2, PHP and what kind of database?

2.0.16, 7.1, mysql 5.7

bupy7 commented 5 years ago

Latest test was build under Yii2 2.0.15 and everything is fine (link).

I don't have ideas why it happened. Do you know why?

i-panov commented 5 years ago

@bupy7 Everything works if I start the migration from the console, but I want to run it from the code like this: Yii::$app->runAction('migrate/up', ['migrationPath' => '@bupy7/pages/migrations', 'interactive' => false]);. In this case, the error falls.

bupy7 commented 5 years ago

@i-panov aaah, ok, look at this file.

i-panov commented 5 years ago

@bupy7 But I run not only this action, but also others, and everything works! In addition, I tried your method and got the same error.

bupy7 commented 5 years ago

No ideas. You should run migrations through console.

i-panov commented 5 years ago

@bupy7 помнится вы русский, так что объясню так. Я просто делаю init миграцию и в нее пихаю всякие сторонние миграции типа инициализации rbac, логов и вот вашей например. Чисто чтоб ничего не забыть если надо будет заново накатывать с нуля.

Однако я сейчас решил эту проблему. Я накатывал методом safeUp который делает это все в транзакции, а обычным up все сработало! Вот уж действительно загадка почему оно не хотело в транзакции работать. Вроде и миграция то простая. Ну да ладно - мне не критично. Пускай будет так. Спасибо за помощь.

P.S. Кстати почему вы не используете билдер? Так и читабельнее и удобнее, к тому же я бы все-таки поместил этот столбец перед датами: $this->addColumn($this->_tableName, 'display_title', $this->boolean()->defaultValue(true)->after('meta_description'));

i-panov commented 5 years ago

ОМГ... Она еще и не отменяется!

Total 1 migration to be reverted:
        m180927_200917_add_display_title

Revert the above migration? (yes|no) [no]:yes
*** reverting m180927_200917_add_display_title
Exception 'yii\base\InvalidConfigException' with message 'Failed to instantiate component or class "m180927_200917_add_display_title".'

Это кстати я уже из консоли и применил и отменил. Применилась нормально, но отменяться никак не хочет... Странно.

bupy7 commented 5 years ago

Кстати почему вы не используете билдер.

Билдера нет в старых версиях Yii2.

bupy7 commented 5 years ago

Миграции успешно применяются и успешно откатываются:

vagrant@yii2basic:/app$ ./yii migrate/up --migrationPath=@bupy7/pages/migrationsYii Migration Tool (based on Yii v2.0.17-dev)

Creating migration history table "migration"...Done.
Total 2 new migrations to be applied:
    m150429_155009_create_page_table
    m180927_200917_add_display_title

Apply the above migrations? (yes|no) [no]:y
*** applying m150429_155009_create_page_table
    > create table {{%page}} ... done (time: 0.010s)
    > create unique index page_idx_1 on {{%page}} (alias) ... done (time: 0.008s)
    > create index page_idx_2 on {{%page}} (alias,published) ... done (time: 0.006s)
*** applied m150429_155009_create_page_table (time: 0.045s)

*** applying m180927_200917_add_display_title
    > add column display_title boolean DEFAULT 1 to table {{%page}} ... done (time: 0.011s)
*** applied m180927_200917_add_display_title (time: 0.020s)

2 migrations were applied.

Migrated up successfully.
vagrant@yii2basic:/app$ ./yii migrate/down --migrationPath=@bupy7/pages/migrations
Yii Migration Tool (based on Yii v2.0.17-dev)

Total 1 migration to be reverted:
    m180927_200917_add_display_title

Revert the above migration? (yes|no) [no]:y
*** reverting m180927_200917_add_display_title
    > drop column display_title from table {{%page}} ... done (time: 0.012s)
*** reverted m180927_200917_add_display_title (time: 0.040s)

1 migration was reverted.

Migrated down successfully.
vagrant@yii2basic:/app$ ./yii migrate/down --migrationPath=@bupy7/pages/migrations
Yii Migration Tool (based on Yii v2.0.17-dev)

Total 1 migration to be reverted:
    m150429_155009_create_page_table

Revert the above migration? (yes|no) [no]:y
*** reverting m150429_155009_create_page_table
    > drop table {{%page}} ... done (time: 0.005s)
*** reverted m150429_155009_create_page_table (time: 0.026s)

1 migration was reverted.

Migrated down successfully.

Также, они успешно откатываются и через метод, который Вы хотите использовать. Почему у Вас это не работает - мне неизвестно. Я показал Вам метод, как это можно сделать, аналогично сделал и я:

public function actionUp()
{
    $migrateController = new MigrateController('migrate', Yii::$app);
    $migrateController->interactive = false;
    $migrateController->migrationPath = [
        '@bupy7/pages/migrations',
    ];
    $migrateController->runAction('up');
}

public function actionDown()
{
    $migrateController = new MigrateController('migrate', Yii::$app);
    $migrateController->interactive = false;
    $migrateController->migrationPath = [
        '@bupy7/pages/migrations',
    ];
    $migrateController->runAction('down', ['all']);
}
i-panov commented 5 years ago

@bupy7 ладно. Видимо какая-то проблема в настройках приложения. Буду искать. Спасибо за попытку помочь.