-
-
Notifications
You must be signed in to change notification settings - Fork 795
Open
Labels
type:bugBugBug
Description
What steps will reproduce the problem?
- Re-run
migration up
after a partially complete migration due to an error (eg. table already exists) - Attempt to run migration:
➜ php tests/bin/yii migrate
Yii Migration Tool (based on Yii v2.0.15.1)
Total 2 new migrations to be applied:
m000001_000000_item
m000002_000000_item_groups
Apply the above migrations? (yes|no) [no]:yes
*** applying m000001_000000_item
> create table items ...Exception 'yii\db\Exception' with message 'SQLSTATE[HY000]: General error: 1 table `items` already exists
Failed to prepare SQL: CREATE TABLE `items` (
...
Error Info:
Array
(
[0] => HY000
[1] => 1
[2] => table `items` already exists
)
Stack trace:
#0 /home/mdaize/Projects/services/item-service/src/vendor/yiisoft/yii2/db/Command.php(1070): yii\db\Command->prepare(false)
#1 /home/mdaize/Projects/services/item-service/src/vendor/yiisoft/yii2/db/sqlite/Command.php(32): yii\db\Command->execute()
#2 /home/mdaize/Projects/services/item-service/src/vendor/yiisoft/yii2/db/Migration.php(323): yii\db\sqlite\Command->execute()
#3 /home/mdaize/Projects/services/item-service/src/migrations/m000001_000000_item.php(53): yii\db\Migration->createTable('items', Array, NULL)
#4 /home/mdaize/Projects/services/item-service/src/vendor/yiisoft/yii2/console/controllers/BaseMigrateController.php(725): m000001_000000_item->up()
#5 /home/mdaize/Projects/services/item-service/src/vendor/yiisoft/yii2/console/controllers/BaseMigrateController.php(199): yii\console\controllers\BaseMigrateController->migrateUp('m000001_000000_...')
#6 [internal function]: yii\console\controllers\BaseMigrateController->actionUp(0)
#7 /home/mdaize/Projects/services/item-service/src/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array(Array, Array)
#8 /home/mdaize/Projects/services/item-service/src/vendor/yiisoft/yii2/base/Controller.php(157): yii\base\InlineAction->runWithParams(Array)
#9 /home/mdaize/Projects/services/item-service/src/vendor/yiisoft/yii2/console/Controller.php(148): yii\base\Controller->runAction('', Array)
#10 /home/mdaize/Projects/services/item-service/src/vendor/yiisoft/yii2/base/Module.php(528): yii\console\Controller->runAction('', Array)
#11 /home/mdaize/Projects/services/item-service/src/vendor/yiisoft/yii2/console/Application.php(180): yii\base\Module->runAction('migrate', Array)
#12 /home/mdaize/Projects/services/item-service/src/vendor/yiisoft/yii2/console/Application.php(147): yii\console\Application->runAction('migrate', Array)
#13 /home/mdaize/Projects/services/item-service/src/vendor/yiisoft/yii2/base/Application.php(386): yii\console\Application->handleRequest(Object(yii\console\Request))
#14 /home/mdaize/Projects/services/item-service/tests/bin/yii(28): yii\base\Application->run()
#15 {main}
- Check exit code with
echo $?
➜ echo $?
0
What's expected?
Exitcode should be 1
What do you get instead?
Exitcode returned at 0
Additional info
This was discovered when using a sqlite database during our local testing process using the following shell script:
#!/bin/bash
php tests/bin/yii migrate up --interactive=0
if [ $? -gt 0 ]; then
exit 1
fi
Other detailed information and stuff:
➜ cat tests/bin/yii
#!/usr/bin/env php
<?php
/**
* Yii console bootstrap file.
*
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'test');
require(__DIR__ . '/../../src/vendor/autoload.php');
require(__DIR__ . '/../../src/vendor/yiisoft/yii2/Yii.php');
$config = yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../src/config/console.php'),
[
'components' => [
'db' => require(__DIR__ . '/../config/test_db.php')
]
]
);
$application = new yii\console\Application($config);
$exitCode = $application->run();
exit($exitCode);
➜ cat /etc/fedora-release
Fedora release 27 (Twenty Seven)
➜ php --version
PHP 7.1.14 (cli) (built: Jan 30 2018 19:05:27) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.1.14, Copyright (c) 1999-2018, by Zend Technologies
with Xdebug v2.5.5, Copyright (c) 2002-2017, by Derick Rethans
➜ composer info
behat/gherkin v4.5.1 Gherkin DSL parser for PHP 5.3
bower-asset/bootstrap v3.3.7
bower-asset/inputmask 3.3.11
bower-asset/jquery 3.2.1
bower-asset/punycode v1.3.2
bower-asset/typeahead.js v0.11.1
bower-asset/yii2-pjax 2.0.7.1
cebe/markdown 1.1.2 A super fast, highly extensible markdown parser for PHP
cilex/cilex 1.1.0 The PHP micro-framework for Command line tools based on the Symfony2 Components
cilex/console-service-provider 1.0.0 Console Service Provider
codeception/base 2.4.1 BDD-style testing framework
codeception/phpunit-wrapper 7.1.1 PHPUnit classes used by Codeception
codeception/specify 0.4.6 BDD code blocks for PHPUnit and Codeception
codeception/stub 1.0.2 Flexible Stub wrapper for PHPUnit's Mock Builder
codeception/verify 0.3.3 BDD assertion library for PHPUnit
container-interop/container-interop 1.2.0 Promoting the interoperability of container objects (DIC, SL, etc.)
doctrine/annotations v1.6.0 Docblock Annotations Parser
doctrine/instantiator 1.1.0 A small, lightweight utility to instantiate objects in PHP without invoking their construc...
doctrine/lexer v1.0.1 Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.
erusev/parsedown 1.7.1 Parser for Markdown.
ezyang/htmlpurifier v4.10.0 Standards compliant HTML filter written in PHP
fzaninotto/faker v1.7.1 Faker is a PHP library that generates fake data for you.
guzzlehttp/guzzle 6.3.3 Guzzle is a PHP HTTP client library
guzzlehttp/promises v1.3.1 Guzzle promises library
guzzlehttp/psr7 1.4.2 PSR-7 message implementation that also provides common utility methods
herrera-io/json 1.0.3 A library for simplifying JSON linting and validation.
herrera-io/phar-update 1.0.3 A library for self-updating Phars.
jms/metadata 1.6.0 Class/method/property metadata management in PHP
jms/parser-lib 1.0.0 A library for easily creating recursive-descent parsers.
jms/serializer 1.11.0 Library for (de-)serializing data of any complexity; supports XML, JSON, and YAML.
justinrainbow/json-schema 1.6.1 A library to validate a json schema.
kherge/version 1.0.1 A parsing and comparison library for semantic versioning.
monolog/monolog 1.23.0 Sends your logs to files, sockets, inboxes, databases and various web services
myclabs/deep-copy 1.7.0 Create deep copies (clones) of your objects
nikic/php-parser v1.4.1 A PHP parser written in PHP
pdepend/pdepend 2.5.0 Official version of pdepend to be handled with Composer
phar-io/manifest 1.0.1 Component for reading phar.io manifest information from a PHP Archive (PHAR)
phar-io/version 1.0.1 Library for handling version information and constraints
phpcollection/phpcollection 0.5.0 General-Purpose Collection Library for PHP
phpdocumentor/fileset 1.0.0 Fileset component for collecting a set of files given directories and file paths
phpdocumentor/graphviz 1.0.4
phpdocumentor/phpdocumentor v2.9.0 Documentation Generator for PHP
phpdocumentor/reflection 3.0.1 Reflection library to do Static Analysis for PHP Projects
phpdocumentor/reflection-docblock 2.0.5
phpoption/phpoption 1.5.0 Option Type for PHP
phpspec/php-diff v1.1.0 A comprehensive library for generating differences between two hashable objects (strings o...
phpspec/prophecy 1.7.6 Highly opinionated mocking framework for PHP 5.3+
phpunit/php-code-coverage 6.0.4 Library that provides collection, processing, and rendering functionality for PHP code cov...
phpunit/php-file-iterator 1.4.5 FilterIterator implementation that filters files based on a list of suffixes.
phpunit/php-text-template 1.2.1 Simple template engine.
phpunit/php-timer 2.0.0 Utility class for timing
phpunit/php-token-stream 3.0.0 Wrapper around PHP's tokenizer extension.
phpunit/phpunit 7.1.4 The PHP Unit Testing framework.
phpunit/phpunit-mock-objects 6.1.1 Mock Object library for PHPUnit
pimple/pimple v1.1.1 Pimple is a simple Dependency Injection Container for PHP 5.3
psr/cache 1.0.1 Common interface for caching libraries
psr/container 1.0.0 Common Container Interface (PHP FIG PSR-11)
psr/http-message 1.0.1 Common interface for HTTP messages
psr/log 1.0.2 Common interface for logging libraries
psr/simple-cache 1.0.1 Common interfaces for simple caching
sebastian/code-unit-reverse-lookup 1.0.1 Looks up which function or method a line of code belongs to
sebastian/comparator 2.1.3 Provides the functionality to compare PHP values for equality
sebastian/diff 3.0.0 Diff implementation
sebastian/environment 3.1.0 Provides functionality to handle HHVM/PHP environments
sebastian/exporter 3.1.0 Provides the functionality to export PHP variables for visualization
sebastian/global-state 2.0.0 Snapshotting of global state
sebastian/object-enumerator 3.0.3 Traverses array structures and object graphs to enumerate all referenced objects
sebastian/object-reflector 1.1.1 Allows reflection of object attributes, including inherited and non-public ones
sebastian/recursion-context 3.0.0 Provides functionality to recursively process PHP variables
sebastian/resource-operations 1.0.0 Provides a list of PHP built-in functions that operate on resources
sebastian/version 2.0.1 Library that helps with managing the version number of Git-hosted PHP projects
seld/jsonlint 1.7.1 JSON Linter
squizlabs/php_codesniffer 3.2.2 PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a define...
symfony/browser-kit v4.0.9 Symfony BrowserKit Component
symfony/config v2.8.39 Symfony Config Component
symfony/console v2.8.39 Symfony Console Component
symfony/css-selector v4.0.9 Symfony CssSelector Component
symfony/debug v3.0.9 Symfony Debug Component
symfony/dependency-injection v3.2.14 Symfony DependencyInjection Component
symfony/dom-crawler v4.0.9 Symfony DomCrawler Component
symfony/event-dispatcher v2.8.39 Symfony EventDispatcher Component
symfony/filesystem v3.0.9 Symfony Filesystem Component
symfony/finder v2.8.39 Symfony Finder Component
symfony/polyfill-mbstring v1.8.0 Symfony polyfill for the Mbstring extension
symfony/process v2.8.39 Symfony Process Component
symfony/stopwatch v2.8.39 Symfony Stopwatch Component
symfony/translation v3.0.9 Symfony Translation Component
symfony/validator v2.8.39 Symfony Validator Component
symfony/yaml v3.3.16 Symfony Yaml Component
theseer/tokenizer 1.1.0 A small library for converting tokenized PHP source code into XML and potentially other fo...
tuyakhov/yii2-json-api v0.1.6 Implementation of JSON API specification for the Yii framework
twig/twig v1.35.3 Twig, the flexible, fast, and secure template language for PHP
yiisoft/yii2 2.0.15.1 Yii PHP Framework Version 2
yiisoft/yii2-bootstrap 2.0.8 The Twitter Bootstrap extension for the Yii framework
yiisoft/yii2-composer 2.0.6 The composer plugin for Yii extension installer
yiisoft/yii2-debug 2.0.13 The debugger extension for the Yii framework
yiisoft/yii2-faker 2.0.4 Fixture generator. The Faker integration for the Yii framework.
yiisoft/yii2-gii 2.0.7 The Gii extension for the Yii framework
yiisoft/yii2-httpclient 2.0.6 HTTP client extension for the Yii framework
zendframework/zend-cache 2.8.2 Caching implementation with a variety of storage options, as well as codified caching stra...
zendframework/zend-config 2.6.0 provides a nested object property based user interface for accessing this configuration da...
zendframework/zend-eventmanager 3.2.1 Trigger and listen to events within a PHP application
zendframework/zend-filter 2.8.0 provides a set of commonly needed data filters
zendframework/zend-hydrator 1.1.0
zendframework/zend-i18n 2.8.0 Provide translations for your application, and filter and validate internationalized values
zendframework/zend-json 3.1.0 provides convenience methods for serializing native PHP to JSON and decoding JSON to nativ...
zendframework/zend-serializer 2.8.1 provides an adapter based interface to simply generate storable representation of PHP type...
zendframework/zend-servicemanager 2.7.10
zendframework/zend-stdlib 2.7.7
zetacomponents/base 1.9.1 The Base package provides the basic infrastructure that all packages rely on. Therefore ev...
zetacomponents/document 1.3.1 The Document components provides a general conversion framework for different semantic doc...
SamMousa, demenkov, rumours86 and ItsReddi
Metadata
Metadata
Assignees
Labels
type:bugBugBug
Type
Projects
Milestone
Relationships
Development
Select code repository
Activity
SamMousa commentedon Nov 16, 2018
@MatthewDaize I think this is because
YII_ENV_TEST
istrue
.To not interrupt testing (by exiting PHP), we don't call exit when we detect testing is true.
In this case the migrations should not be run with
YII_ENV_TEST
set totrue
.rumours86 commentedon Mar 25, 2019
This is not the right behavior!
You suggest to start migrations for test base so?
export YII_ENV_TEST=false && php yii_test migrate --interactive=0
rumours86 commentedon Mar 25, 2019
Unfortunately, it still does not work!
machour commentedon Mar 25, 2019
Re-opening issue as requested by @rumours86
rob006 commentedon Mar 25, 2019
YII_ENV_TEST
is not environment variable, it is PHP constant.rumours86 commentedon Mar 26, 2019
How can I run "php yii_test migrate" so that they return the exitcode=1 in case of an error?
rumours86 commentedon Mar 26, 2019
Yii Migration Tool (based on Yii v2.0.17)
rumours86 commentedon Mar 26, 2019
wrote bash script
rumours86 commentedon Mar 26, 2019
wrote in yii_test
Blacknife commentedon Jul 2, 2019
Is there an adequate solution to this problem?
exitcode 1 on exception in yii_test
samdark commentedon Jul 16, 2019
@Blacknife not yet.
particleflux commentedon Sep 27, 2023
If you're running yii >= 2.0.36, you can configure this in console config like the following:
(see https://www.yiiframework.com/doc/api/2.0/yii-console-controller#$silentExitOnException-detail )