mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-22 05:20:56 +01:00
Move database configuration into new-style setup checks
Summary: Port the database checks over. Test Plan: Triggered all the checks via intentional misconfiguration. Reviewers: chad, btrahan Reviewed By: btrahan CC: aran Maniphest Tasks: T2228 Differential Revision: https://secure.phabricator.com/D4590
This commit is contained in:
parent
27ec272057
commit
72ec4f7a6f
4 changed files with 89 additions and 72 deletions
|
@ -1214,6 +1214,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorSetupCheck' => 'applications/config/check/PhabricatorSetupCheck.php',
|
||||
'PhabricatorSetupCheckAPC' => 'applications/config/check/PhabricatorSetupCheckAPC.php',
|
||||
'PhabricatorSetupCheckBaseURI' => 'applications/config/check/PhabricatorSetupCheckBaseURI.php',
|
||||
'PhabricatorSetupCheckDatabase' => 'applications/config/check/PhabricatorSetupCheckDatabase.php',
|
||||
'PhabricatorSetupCheckExtensions' => 'applications/config/check/PhabricatorSetupCheckExtensions.php',
|
||||
'PhabricatorSetupCheckExtraConfig' => 'applications/config/check/PhabricatorSetupCheckExtraConfig.php',
|
||||
'PhabricatorSetupCheckFacebook' => 'applications/config/check/PhabricatorSetupCheckFacebook.php',
|
||||
|
@ -2580,6 +2581,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorSettingsPanelSearchPreferences' => 'PhabricatorSettingsPanel',
|
||||
'PhabricatorSetupCheckAPC' => 'PhabricatorSetupCheck',
|
||||
'PhabricatorSetupCheckBaseURI' => 'PhabricatorSetupCheck',
|
||||
'PhabricatorSetupCheckDatabase' => 'PhabricatorSetupCheck',
|
||||
'PhabricatorSetupCheckExtensions' => 'PhabricatorSetupCheck',
|
||||
'PhabricatorSetupCheckExtraConfig' => 'PhabricatorSetupCheck',
|
||||
'PhabricatorSetupCheckFacebook' => 'PhabricatorSetupCheck',
|
||||
|
|
|
@ -0,0 +1,85 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorSetupCheckDatabase extends PhabricatorSetupCheck {
|
||||
|
||||
public function getExecutionOrder() {
|
||||
// This must run after basic PHP checks, but before most other checks.
|
||||
return 0.5;
|
||||
}
|
||||
|
||||
protected function executeChecks() {
|
||||
$conf = PhabricatorEnv::newObjectFromConfig('mysql.configuration-provider');
|
||||
$conn_user = $conf->getUser();
|
||||
$conn_pass = $conf->getPassword();
|
||||
$conn_host = $conf->getHost();
|
||||
|
||||
ini_set('mysql.connect_timeout', 2);
|
||||
|
||||
$conn_raw = PhabricatorEnv::newObjectFromConfig(
|
||||
'mysql.implementation',
|
||||
array(
|
||||
array(
|
||||
'user' => $conn_user,
|
||||
'pass' => $conn_pass,
|
||||
'host' => $conn_host,
|
||||
'database' => null,
|
||||
),
|
||||
));
|
||||
|
||||
try {
|
||||
queryfx($conn_raw, 'SELECT 1');
|
||||
} catch (AphrontQueryConnectionException $ex) {
|
||||
$message = pht(
|
||||
"Unable to connect to MySQL!\n\n".
|
||||
"%s\n\n".
|
||||
"Make sure Phabricator and MySQL are correctly configured.",
|
||||
$ex->getMessage());
|
||||
|
||||
$this->newIssue('mysql.connect')
|
||||
->setName(pht('Can Not Connect to MySQL'))
|
||||
->setMessage($message)
|
||||
->setIsFatal(true)
|
||||
->addPhabricatorConfig('mysql.host')
|
||||
->addPhabricatorConfig('mysql.user')
|
||||
->addPhabricatorConfig('mysql.pass');
|
||||
return;
|
||||
}
|
||||
|
||||
$engines = queryfx_all($conn_raw, 'SHOW ENGINES');
|
||||
$engines = ipull($engines, 'Support', 'Engine');
|
||||
|
||||
$innodb = idx($engines, 'InnoDB');
|
||||
if ($innodb != 'YES' && $innodb != 'DEFAULT') {
|
||||
$message = pht(
|
||||
"The 'InnoDB' engine is not available in MySQL. Enable InnoDB in ".
|
||||
"your MySQL configuration.".
|
||||
"\n\n".
|
||||
"(If you aleady created tables, MySQL incorrectly used some other ".
|
||||
"engine to create them. You need to convert them or drop and ".
|
||||
"reinitialize them.)");
|
||||
|
||||
$this->newIssue('mysql.innodb')
|
||||
->setName(pht('MySQL InnoDB Engine Not Available'))
|
||||
->setMessage($message)
|
||||
->setIsFatal(true);
|
||||
return;
|
||||
}
|
||||
|
||||
$namespace = PhabricatorEnv::getEnvConfig('storage.default-namespace');
|
||||
|
||||
$databases = queryfx_all($conn_raw, 'SHOW DATABASES');
|
||||
$databases = ipull($databases, 'Database', 'Database');
|
||||
|
||||
if (empty($databases[$namespace.'_meta_data'])) {
|
||||
$message = pht(
|
||||
'Run the storage upgrade script to setup Phabricator\'s database '.
|
||||
'schema.');
|
||||
|
||||
$this->newIssue('storage.upgrade')
|
||||
->setName(pht('Setup MySQL Schema'))
|
||||
->setMessage($message)
|
||||
->setIsFatal(true)
|
||||
->addCommand('<tt>phabricator/ $</tt> ./bin/storage upgrade');
|
||||
}
|
||||
}
|
||||
}
|
|
@ -43,76 +43,6 @@ final class PhabricatorSetup {
|
|||
|
||||
self::write("[OKAY] Basic configuration OKAY\n");
|
||||
|
||||
self::writeHeader("MySQL DATABASE & STORAGE CONFIGURATION");
|
||||
|
||||
$conf = PhabricatorEnv::newObjectFromConfig('mysql.configuration-provider');
|
||||
$conn_user = $conf->getUser();
|
||||
$conn_pass = $conf->getPassword();
|
||||
$conn_host = $conf->getHost();
|
||||
|
||||
self::write(" okay Trying to connect to MySQL database ".
|
||||
"{$conn_user}@{$conn_host}...\n");
|
||||
|
||||
ini_set('mysql.connect_timeout', 2);
|
||||
|
||||
$conn_raw = PhabricatorEnv::newObjectFromConfig(
|
||||
'mysql.implementation',
|
||||
array(
|
||||
array(
|
||||
'user' => $conn_user,
|
||||
'pass' => $conn_pass,
|
||||
'host' => $conn_host,
|
||||
'database' => null,
|
||||
),
|
||||
));
|
||||
|
||||
try {
|
||||
queryfx($conn_raw, 'SELECT 1');
|
||||
self::write(" okay Connection successful!\n");
|
||||
} catch (AphrontQueryConnectionException $ex) {
|
||||
$message = $ex->getMessage();
|
||||
self::writeFailure();
|
||||
self::write(
|
||||
"Setup failure! MySQL exception: {$message} \n".
|
||||
"Edit Phabricator configuration keys 'mysql.user', ".
|
||||
"'mysql.host' and 'mysql.pass' to enable Phabricator ".
|
||||
"to connect.");
|
||||
return;
|
||||
}
|
||||
|
||||
$engines = queryfx_all($conn_raw, 'SHOW ENGINES');
|
||||
$engines = ipull($engines, 'Support', 'Engine');
|
||||
|
||||
$innodb = idx($engines, 'InnoDB');
|
||||
if ($innodb != 'YES' && $innodb != 'DEFAULT') {
|
||||
self::writeFailure();
|
||||
self::write(
|
||||
"Setup failure! The 'InnoDB' engine is not available. Enable ".
|
||||
"InnoDB in your MySQL configuration. If you already created tables, ".
|
||||
"MySQL incorrectly used some other engine. You need to convert ".
|
||||
"them or drop and reinitialize them.");
|
||||
return;
|
||||
} else {
|
||||
self::write(" okay InnoDB is available.\n");
|
||||
}
|
||||
|
||||
$namespace = PhabricatorEnv::getEnvConfig('storage.default-namespace');
|
||||
|
||||
$databases = queryfx_all($conn_raw, 'SHOW DATABASES');
|
||||
$databases = ipull($databases, 'Database', 'Database');
|
||||
if (empty($databases[$namespace.'_meta_data'])) {
|
||||
self::writeFailure();
|
||||
self::write(
|
||||
"Setup failure! You haven't run 'bin/storage upgrade'. See this ".
|
||||
"article for instructions:\n");
|
||||
self::writeDoc('article/Configuration_Guide.html');
|
||||
return;
|
||||
} else {
|
||||
self::write(" okay Databases have been initialized.\n");
|
||||
}
|
||||
|
||||
self::write("[OKAY] Database and storage configuration OKAY\n");
|
||||
|
||||
self::writeHeader('SUCCESS!');
|
||||
self::write(
|
||||
"Congratulations! Your setup seems mostly correct, or at least fairly ".
|
||||
|
|
|
@ -204,8 +204,8 @@ abstract class PhabricatorBaseEnglishTranslation
|
|||
),
|
||||
|
||||
'Run these %d command(s):' => array(
|
||||
'Run this %d command:',
|
||||
'Run these %d commands:',
|
||||
'Run this command:',
|
||||
'Run these commands:',
|
||||
),
|
||||
|
||||
'Install these %d PHP extension(s):' => array(
|
||||
|
|
Loading…
Reference in a new issue