Add config parameter to toggle automatic SQL migrations
- Add two command line opterations to show schema version and to execute SQL migrations - Add new configuration parameter to enable or disable SQL migrations
This commit is contained in:
23
app/Console/DatabaseMigrationCommand.php
Normal file
23
app/Console/DatabaseMigrationCommand.php
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Kanboard\Console;
|
||||||
|
|
||||||
|
use Kanboard\ServiceProvider\DatabaseProvider;
|
||||||
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
|
||||||
|
class DatabaseMigrationCommand extends DatabaseVersionCommand
|
||||||
|
{
|
||||||
|
protected function configure()
|
||||||
|
{
|
||||||
|
$this
|
||||||
|
->setName('db:migrate')
|
||||||
|
->setDescription('Execute SQL migrations');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function execute(InputInterface $input, OutputInterface $output)
|
||||||
|
{
|
||||||
|
parent::execute($input, $output);
|
||||||
|
DatabaseProvider::runMigrations($this->container['db']);
|
||||||
|
}
|
||||||
|
}
|
||||||
23
app/Console/DatabaseVersionCommand.php
Normal file
23
app/Console/DatabaseVersionCommand.php
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Kanboard\Console;
|
||||||
|
|
||||||
|
use Kanboard\ServiceProvider\DatabaseProvider;
|
||||||
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
|
||||||
|
class DatabaseVersionCommand extends BaseCommand
|
||||||
|
{
|
||||||
|
protected function configure()
|
||||||
|
{
|
||||||
|
$this
|
||||||
|
->setName('db:version')
|
||||||
|
->setDescription('Show database schema version');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function execute(InputInterface $input, OutputInterface $output)
|
||||||
|
{
|
||||||
|
$output->writeln('<info>Current version: '.DatabaseProvider::getSchemaVersion($this->container['db']).'</info>');
|
||||||
|
$output->writeln('<info>Last version: '.\Schema\VERSION.'</info>');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,8 @@
|
|||||||
namespace Kanboard\ServiceProvider;
|
namespace Kanboard\ServiceProvider;
|
||||||
|
|
||||||
use Kanboard\Console\CronjobCommand;
|
use Kanboard\Console\CronjobCommand;
|
||||||
|
use Kanboard\Console\DatabaseMigrationCommand;
|
||||||
|
use Kanboard\Console\DatabaseVersionCommand;
|
||||||
use Kanboard\Console\LocaleComparatorCommand;
|
use Kanboard\Console\LocaleComparatorCommand;
|
||||||
use Kanboard\Console\LocaleSyncCommand;
|
use Kanboard\Console\LocaleSyncCommand;
|
||||||
use Kanboard\Console\PluginInstallCommand;
|
use Kanboard\Console\PluginInstallCommand;
|
||||||
@@ -55,6 +57,8 @@ class CommandProvider implements ServiceProviderInterface
|
|||||||
$application->add(new PluginUpgradeCommand($container));
|
$application->add(new PluginUpgradeCommand($container));
|
||||||
$application->add(new PluginInstallCommand($container));
|
$application->add(new PluginInstallCommand($container));
|
||||||
$application->add(new PluginUninstallCommand($container));
|
$application->add(new PluginUninstallCommand($container));
|
||||||
|
$application->add(new DatabaseMigrationCommand($container));
|
||||||
|
$application->add(new DatabaseVersionCommand($container));
|
||||||
|
|
||||||
$container['cli'] = $application;
|
$container['cli'] = $application;
|
||||||
return $container;
|
return $container;
|
||||||
|
|||||||
@@ -27,6 +27,10 @@ class DatabaseProvider implements ServiceProviderInterface
|
|||||||
{
|
{
|
||||||
$container['db'] = $this->getInstance();
|
$container['db'] = $this->getInstance();
|
||||||
|
|
||||||
|
if (DB_RUN_MIGRATIONS) {
|
||||||
|
self::runMigrations($container['db']);
|
||||||
|
}
|
||||||
|
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
$container['db']->getStatementHandler()
|
$container['db']->getStatementHandler()
|
||||||
->withLogging()
|
->withLogging()
|
||||||
@@ -38,7 +42,7 @@ class DatabaseProvider implements ServiceProviderInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setup the database driver and execute schema migration
|
* Setup the database driver
|
||||||
*
|
*
|
||||||
* @access public
|
* @access public
|
||||||
* @return \PicoDb\Database
|
* @return \PicoDb\Database
|
||||||
@@ -59,12 +63,39 @@ class DatabaseProvider implements ServiceProviderInterface
|
|||||||
throw new LogicException('Database driver not supported');
|
throw new LogicException('Database driver not supported');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($db->schema()->check(\Schema\VERSION)) {
|
return $db;
|
||||||
return $db;
|
}
|
||||||
} else {
|
|
||||||
|
/**
|
||||||
|
* Get current database version
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
* @access public
|
||||||
|
* @param Database $db
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public static function getSchemaVersion(Database $db)
|
||||||
|
{
|
||||||
|
return $db->getDriver()->getSchemaVersion();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute database migrations
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
* @access public
|
||||||
|
* @throws RuntimeException
|
||||||
|
* @param Database $db
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function runMigrations(Database $db)
|
||||||
|
{
|
||||||
|
if (! $db->schema()->check(\Schema\VERSION)) {
|
||||||
$messages = $db->getLogMessages();
|
$messages = $db->getLogMessages();
|
||||||
throw new RuntimeException('Unable to run SQL migrations: '.implode(', ', $messages).' (You may have to fix it manually)');
|
throw new RuntimeException('Unable to run SQL migrations: '.implode(', ', $messages).' (You may have to fix it manually)');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -79,7 +110,7 @@ class DatabaseProvider implements ServiceProviderInterface
|
|||||||
|
|
||||||
return new Database(array(
|
return new Database(array(
|
||||||
'driver' => 'sqlite',
|
'driver' => 'sqlite',
|
||||||
'filename' => DB_FILENAME
|
'filename' => DB_FILENAME,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,9 @@ defined('LOG_FILE') or define('LOG_FILE', DATA_DIR.DIRECTORY_SEPARATOR.'debug.lo
|
|||||||
// Application version
|
// Application version
|
||||||
defined('APP_VERSION') or define('APP_VERSION', build_app_version('$Format:%d$', '$Format:%H$'));
|
defined('APP_VERSION') or define('APP_VERSION', build_app_version('$Format:%d$', '$Format:%H$'));
|
||||||
|
|
||||||
|
// Run automatically database migrations
|
||||||
|
defined('DB_RUN_MIGRATIONS') or define('DB_RUN_MIGRATIONS', true);
|
||||||
|
|
||||||
// Database driver: sqlite, mysql or postgres
|
// Database driver: sqlite, mysql or postgres
|
||||||
defined('DB_DRIVER') or define('DB_DRIVER', 'sqlite');
|
defined('DB_DRIVER') or define('DB_DRIVER', 'sqlite');
|
||||||
|
|
||||||
|
|||||||
@@ -50,6 +50,11 @@ define('MAIL_SMTP_ENCRYPTION', null); // Valid values are "null", "ssl" or "tls"
|
|||||||
// Sendmail command to use when the transport is "sendmail"
|
// Sendmail command to use when the transport is "sendmail"
|
||||||
define('MAIL_SENDMAIL_COMMAND', '/usr/sbin/sendmail -bs');
|
define('MAIL_SENDMAIL_COMMAND', '/usr/sbin/sendmail -bs');
|
||||||
|
|
||||||
|
// Run automatically database migrations
|
||||||
|
// If set to false, you will have to run manually the SQL migrations from the CLI during the next Kanboard upgrade
|
||||||
|
// Do not run the migrations from multiple processes at the same time (example: web page + background worker)
|
||||||
|
define('DB_RUN_MIGRATIONS', true);
|
||||||
|
|
||||||
// Database driver: sqlite, mysql or postgres (sqlite by default)
|
// Database driver: sqlite, mysql or postgres (sqlite by default)
|
||||||
define('DB_DRIVER', 'sqlite');
|
define('DB_DRIVER', 'sqlite');
|
||||||
|
|
||||||
@@ -226,3 +231,6 @@ define('HTTP_PROXY_PASSWORD', '');
|
|||||||
|
|
||||||
// Set to false to allow self-signed certificates
|
// Set to false to allow self-signed certificates
|
||||||
define('HTTP_VERIFY_SSL_CERTIFICATE', true);
|
define('HTTP_VERIFY_SSL_CERTIFICATE', true);
|
||||||
|
|
||||||
|
// TOTP (2FA) issuer name
|
||||||
|
define('TOTP_ISSUER', 'Kanboard');
|
||||||
|
|||||||
Reference in New Issue
Block a user