From cd2e74a4769dfe6ec1b970cd28891dbcdac8a90d Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 17 Nov 2019 13:18:35 +0100 Subject: [PATCH] Some experimental commands for DB creation. --- .deploy/docker/entrypoint.sh | 1 + app/Console/Commands/CreateDatabase.php | 71 +++++++++++++++++++++++++ composer.json | 3 +- 3 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 app/Console/Commands/CreateDatabase.php diff --git a/.deploy/docker/entrypoint.sh b/.deploy/docker/entrypoint.sh index 1fe40d142e..2ddeb67624 100755 --- a/.deploy/docker/entrypoint.sh +++ b/.deploy/docker/entrypoint.sh @@ -55,6 +55,7 @@ fi #env $(grep -v "^\#" .env | xargs) php artisan cache:clear php artisan migrate --seed +php artisan firefly-iii:create-database php artisan firefly-iii:decrypt-all # there are 13 upgrade commands diff --git a/app/Console/Commands/CreateDatabase.php b/app/Console/Commands/CreateDatabase.php new file mode 100644 index 0000000000..f4fe3a4e19 --- /dev/null +++ b/app/Console/Commands/CreateDatabase.php @@ -0,0 +1,71 @@ +info('This command currently applies to MySQL connections only.'); + } + // try to set up a raw connection: + $dsn = sprintf('mysql:host=%s;charset=utf8mb4', env('DB_HOST')); + $options = [ + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::ATTR_EMULATE_PREPARES => false, + ]; + try { + $pdo = new PDO($dsn, env('DB_USERNAME'), env('DB_PASSWORD'), $options); + } catch (PDOException $e) { + $this->error(sprintf('Error when connecting to DB: %s', $e->getMessage())); + + return 1; + } + // with PDO, try to list DB's ( + $stmt = $pdo->prepare('SHOW DATABASES WHERE `Database` = ?'); + $stmt->execute([env('DB_DATABASE')]); + $result = $stmt->fetch(); + if (false === $result) { + $this->error(sprintf('Database "%s" does not exist.', env('DB_DATABASE'))); + + // try to create it. + $stmt = $pdo->query(sprintf('CREATE DATABASE `%s` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;', env('DB_DATABASE'))); + $stmt->execute(); + $stmt->fetch(); + $this->info(sprintf('Created database "%s"', env('DB_DATABASE'))); + + return 0; + } + $this->info(sprintf('Database "%s" exists.', env('DB_DATABASE'))); + + return 0; + } +} diff --git a/composer.json b/composer.json index 97e54123ff..01e0e3033c 100644 --- a/composer.json +++ b/composer.json @@ -87,7 +87,8 @@ "pragmarx/google2fa": "6.1.3", "pragmarx/google2fa-laravel": "1.*", "pragmarx/recovery": "^0.1.0", - "rcrowe/twigbridge": "0.9.*" + "rcrowe/twigbridge": "0.9.*", + "ext-pdo": "*" }, "require-dev": { "barryvdh/laravel-ide-helper": "2.*",