Obwohl dies ein alter Beitrag ist, wollte ich mich darauf einlassen, da dieses Thema immer noch relevant ist und die akzeptierte Antwort in meinem Anwendungsfall nicht ideal ist. Ich würde nicht vorschlagen, dass andere dies tun; speziell für ein stark frequentiertes System.
Mein Problem mit der akzeptierten Antwort ist, dass empfohlen wird, die Homepage als Gesundheitscheck zu verwenden. Abhängig von Ihrer Site könnte dies in Ordnung sein, aber ich sehe keine Notwendigkeit, dass die Datenbank bei einer Integritätsprüfung abgefragt wird. Selbst wenn die DB-Verbindung fehlschlägt, ist die Instanz technisch immer noch fehlerfrei. Wenn beispielsweise Ihr RDS-Cluster ausfällt, wird auf der Startseite ein DB-Fehler angezeigt, der einen anzeigt, 500
sodass Sie Ihre automatische Skalierung ohne Notwendigkeit auslösen würden. Bei der Integritätsprüfung muss nur die App überprüft und sichergestellt werden, dass sie ordnungsgemäß eingerichtet ist.
Meine Homepage enthält viele Abfragen, und die Integritätsprüfung allein belastet den RDS-Cluster bei der Einrichtung mehrerer Instanzen unnötig. Ich könnte eine hellere Seite angeben, aber dies ist immer noch nicht ideal, da die Integritätsprüfung sicherstellen sollte, dass die Instanz ordnungsgemäß eingerichtet ist, und ich möchte nicht, dass jedem System, das ich hochfahre, eine projektspezifische Prüfung hinzugefügt wird. Obwohl es auch dafür Anwendungsfälle gibt.
Ich benutze diesen einfachen Gesundheitscheck ( _healthCheck.php
):
<?php
/**
* Check if basic WordPress structure is in place
* This is to be used for load balancer health checks
*/
// Checks
define('WORDPRESS_CONFIG', __DIR__ . DIRECTORY_SEPARATOR . 'wp-config.php');
define('WORDPRESS_DIRECTORY', __DIR__ . DIRECTORY_SEPARATOR . 'wordpress');
define('WP_CONTENT_DIRECTORY', __DIR__ . DIRECTORY_SEPARATOR . 'wp-content');
// Health Check Flags
$_healthCheckStatus = true;
// Will stop the while loop
$_healthCheckCompleted = false;
// Just to be safe
try {
// DoWhile loop here to simplify kicking out on a false $_healthCheckStatus
do {
// Check if wp-config exists
if (!file_exists(WORDPRESS_CONFIG)) {
$_healthCheckStatus = false;
}
// Make sure we have required directories
$_healthCheckStatus = _dirIsValidAndNotEmpty(WORDPRESS_DIRECTORY);
$_healthCheckStatus = _dirIsValidAndNotEmpty(WP_CONTENT_DIRECTORY);
// Checks are complete, kick out the loop
$_healthCheckCompleted = true; // Just say no to infinity and beyond
} while (false === $_healthCheckCompleted && true === $_healthCheckStatus);
} catch (\Exception $e) {
// Health check fails
$_healthCheckStatus = false;
}
// If a bad healthcheck, return 404 to tell the load balancer we suck
if (false === $_healthCheckStatus) {
header("HTTP/1.0 404 Not Found");
?>
<html>
<body><h1>Health is bad</h1></body>
</html>
<?php
die();
} else {
?>
<html>
<body><h1>Health appears good</h1></body>
</html>
<?php
}
/**
* Validates a directory and ensures it's not empty
* @param string $dir
* @return bool
*/
function _dirIsValidAndNotEmpty($dir) {
// Make sure we have a directory
if (is_dir($dir)) {
// Make sure it's not empty
$_dirIsNotEmpty = (new \FilesystemIterator($dir))->valid();
if ($_dirIsNotEmpty) {
return true;
}
}
return false;
}
Ein paar Dinge zu beachten:
- Ich installiere WordPress immer im
wordpress
Verzeichnis.
- Dies macht es viel einfacher, ein Projekt in Git zu verwalten, da Sie das
wordpress
Verzeichnis einfach ignorieren können .
- Da ich WordPress in einem eigenen Verzeichnis habe, verwende ich gerne mein eigenes
wp-content
, um das Projektmanagement zu vereinfachen.
- Sie können dies leicht an Ihre Bedürfnisse anpassen.
Diese Integritätsprüfung überprüft nur das System, um sicherzustellen, dass es ordnungsgemäß eingerichtet ist. Die Datenbank muss nicht abgefragt werden, da dies für die Integritätsprüfung nicht erforderlich ist. Dies ist ein Konfigurationsproblem, das behoben werden sollte, bevor Sie Ihr System überhaupt einrichten.