Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add check: CachePrefixIsSet #82

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ Here is an example output of the command:
- Are there any migrations that need to be run?
- Is the storage directory linked?
- Can Redis be accessed?
- Is a CACHE_PREFIX set?

### Development environment checks

Expand Down Expand Up @@ -89,6 +90,7 @@ return [
*/
'checks' => [
\BeyondCode\SelfDiagnosis\Checks\AppKeyIsSet::class,
\BeyondCode\SelfDiagnosis\Checks\CachePrefixIsSet::class,
\BeyondCode\SelfDiagnosis\Checks\CorrectPhpVersionIsInstalled::class,
\BeyondCode\SelfDiagnosis\Checks\DatabaseCanBeAccessed::class => [
'default_connection' => true,
Expand Down
1 change: 1 addition & 0 deletions config/config.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/
'checks' => [
\BeyondCode\SelfDiagnosis\Checks\AppKeyIsSet::class,
\BeyondCode\SelfDiagnosis\Checks\CachePrefixIsSet::class,
\BeyondCode\SelfDiagnosis\Checks\CorrectPhpVersionIsInstalled::class,
\BeyondCode\SelfDiagnosis\Checks\DatabaseCanBeAccessed::class => [
'default_connection' => true,
Expand Down
49 changes: 49 additions & 0 deletions src/Checks/CachePrefixIsSet.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<?php

namespace BeyondCode\SelfDiagnosis\Checks;

use Dotenv\Dotenv;

class CachePrefixIsSet implements Check
{
/**
* The name of the check.
*
* @param array $config
* @return string
*/
public function name(array $config): string
{
return trans('self-diagnosis::checks.cache_prefix_is_set.name');
}

/**
* Perform the actual verification of this check.
*
* @param array $config
* @return bool
*/
public function check(array $config): bool
{
if (interface_exists(\Dotenv\Environment\FactoryInterface::class)) {
$env = Dotenv::create(base_path(), '.env');
} else {
$env = new Dotenv(base_path(), '.env');
}

$env->safeLoad();

return in_array('CACHE_PREFIX', $env->getEnvironmentVariableNames());
}

/**
* The error message to display in case the check does not pass.
*
* @param array $config
* @return string
*/
public function message(array $config): string
{
return trans('self-diagnosis::checks.cache_prefix_is_set.message');
}
}
28 changes: 28 additions & 0 deletions tests/CachePrefixIsSetTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

namespace BeyondCode\SelfDiagnosis\Tests;

use Orchestra\Testbench\TestCase;
use BeyondCode\SelfDiagnosis\Checks\CachePrefixIsSet;
use BeyondCode\SelfDiagnosis\SelfDiagnosisServiceProvider;

class CachePrefixIsSetTest extends TestCase
{
public function getPackageProviders($app)
{
return [
SelfDiagnosisServiceProvider::class,
];
}

/** @test */
public function it_checks_if_the_cache_prefix_env_variable_is_set_in_the_env_file()
{
$this->app->setBasePath(__DIR__ . '/fixtures');

$check = new CachePrefixIsSet();

$this->assertFalse($check->check([]));
$this->assertSame('A missing cache prefix could cause problems in shared hosting environments due to shared cache key access. Set a custom "CACHE_PREFIX" in your .env file.', $check->message([]));
}
}
222 changes: 113 additions & 109 deletions translations/de/checks.php
Original file line number Diff line number Diff line change
@@ -1,109 +1,113 @@
<?php

return [
'app_key_is_set' => [
'message' => 'Der Anwendungsschlüssel ist nicht gesetzt. Nutze "php artisan key:generate", um einen zu erstellen und zu setzen.',
'name' => 'Anwendungsschlüssel ist gesetzt',
],
'composer_with_dev_dependencies_is_up_to_date' => [
'message' => 'Die Composer Abhängigkeiten sind nicht aktuell. Nutze "composer install", um diese zu aktualisieren. :more',
'name' => 'Composer Abhängigkeiten (inkl. dev) sind aktuell',
],
'composer_without_dev_dependencies_is_up_to_date' => [
'message' => 'Die Composer Abhängigkeiten sind nicht aktuell. Nutze "composer install", um diese zu aktualisieren. :more',
'name' => 'Composer Abhängigkeiten (ohne dev) sind aktuell',
],
'configuration_is_cached' => [
'message' => 'Die Konfiguration sollte für bessere Performance gecached sein im Produktivbetrieb. Nutze "php artisan config:cache", um den Konfigurations-Cache zu erstellen.',
'name' => 'Konfiguration ist gecached',
],
'configuration_is_not_cached' => [
'message' => 'Die Konfiguration sollte während der Entwicklung nicht gecached sein. Nutze "php artisan config:clear", um den Konfigurations-Cache zu leeren.',
'name' => 'Konfiguration ist nicht gecached',
],
'correct_php_version_is_installed' => [
'message' => 'Die benötigte PHP Version ist nicht installiert.' . PHP_EOL . 'Benötigt: :required' . PHP_EOL . 'In Verwendung: :used',
'name' => 'Die richtige PHP Version ist installiert',
],
'database_can_be_accessed' => [
'message' => 'Auf die Datenbank kann nicht zugegriffen werden: :error',
'name' => 'Die Datenbank ist erreichbar',
],
'debug_mode_is_not_enabled' => [
'message' => 'Der Debugging-Modus sollte im Produktivbetrieb nicht genutzt werden. Setze "APP_DEBUG" in der .env Datei auf "false".',
'name' => 'Der Debugging-Modus ist deaktiviert',
],
'directories_have_correct_permissions' => [
'message' => 'Folgende Verzeichnisse sind nicht beschreibbar:' . PHP_EOL .':directories',
'name' => 'Alle Verzeichnisse haben die richtigen Berechtigungen',
],
'env_file_exists' => [
'message' => 'Die .env Datei existiert nicht. Bitte kopiere die Datei .env.example zu .env und passe diese entsprechend an.',
'name' => 'Die Umgebungsvariablendatei existiert',
],
'example_environment_variables_are_set' => [
'message' => 'Folgende Umgebungsvariablen fehlen im .env Umgebungsfile, sind aber in .env.example definiert:' . PHP_EOL . ':variables',
'name' => 'Die Beispiel-Umgebungsvariablen sind gesetzt',
],
'locales_are_installed' => [
'message' => [
'cannot_run_on_windows' => 'Dieser Check kann unter Windows nicht ausgeführt werden..',
'locale_command_not_available' => 'Der Befehl "locale -a" ist auf dem aktuellen System nicht verfügbar.',
'missing_locales' => 'Folgende Sprachumgebungen (locales) fehlen:' . PHP_EOL . ':locales',
'shell_exec_not_available' => 'Die Funktion "shell_exec" ist entweder nicht definiert oder deaktiviert, daher können die Sprachumgebungen nicht abgefragt werden.',
],
'name' => 'Benötigte Sprachumgebungen sind installiert',
],
'maintenance_mode_not_enabled' => [
'message' => 'Der Wartungsmodus ist noch aktiv. Deaktiviere ihn mit "php artisan up".',
'name' => 'Wartungsmodus ist nicht aktiv',
],
'migrations_are_up_to_date' => [
'message' => [
'need_to_migrate' => 'Die Datenbank muss aktualisiert werden. Nutze "php artisan migrate", um die Migrationen einzuspielen.',
'unable_to_check' => 'Die Migrationen konnten nicht geprüft werden: :reason',
],
'name' => 'Die Migrationen sind aktuell',
],
'php_extensions_are_disabled' => [
'message' => 'Die folgenden Erweiterungen sind noch immer aktiviert:' . PHP_EOL . ':extensions',
'name' => 'Unerwünschte PHP Erweiterungen sind deaktiviert',
],
'php_extensions_are_installed' => [
'message' => 'Die folgenden Erweiterungen fehlen:' . PHP_EOL . ':extensions',
'name' => 'Die benötigten PHP Erweiterungen sind installiert',
],
'redis_can_be_accessed' => [
'message' => [
'not_accessible' => 'Auf den Redis Cache kann nicht zugegriffen werden: :error',
'default_cache' => 'Der Standard-Cache ist nicht erreichbar.',
'named_cache' => 'Der Cache :name ist nicht erreichbar.',
],
'name' => 'Der Redis Cache ist erreichbar',
],
'routes_are_cached' => [
'message' => 'Die Routen sollten für bessere Performance gecached sein im Produktivbetrieb. Nutze "php artisan route:cache", um den Routen-Cache zu erstellen.',
'name' => 'Routen sind gecached',
],
'routes_are_not_cached' => [
'message' => 'Die Routen sollten während der Entwicklung nicht gecached sein. Nutze "php artisan route:clear", um den Routen-Cache zu leeren.',
'name' => 'Routen sind nicht gecached',
],
'servers_are_pingable' => [
'message' => "Der Server ':host' (Port: :port) ist nicht erreichbar (Timeout nach :timeout Sekunden).",
'name' => 'Benötigte Server sind pingbar',
],
'storage_directory_is_linked' => [
'message' => 'Das Speicherverzeichnis ist nicht verlinkt. Nutze "php artisan storage:link", um eine symbolische Verknüpfung zu erstellen.',
'name' => 'Das Speicherverzeichnis ist verlinkt',
],
'supervisor_programs_are_running' => [
'message' => [
'cannot_run_on_windows' => 'Dieser Check kann unter Windows nicht ausgeführt werden..',
'not_running_programs' => 'Die folgenden Programme laufen nicht oder benötigen einen Neustart:' . PHP_EOL . ':programs',
'shell_exec_not_available' => 'Die Funktion "shell_exec" ist entweder nicht definiert oder deaktiviert, daher können die laufenden Programme nicht abgefragt werden.',
'supervisor_command_not_available' => 'Der Befehl "supervisorctl" ist auf dem aktuellen System nicht verfügbar.',
],
'name' => 'Alle supervisor Programme sind in Betrieb',
],
];
<?php

return [
'app_key_is_set' => [
'message' => 'Der Anwendungsschlüssel ist nicht gesetzt. Nutze "php artisan key:generate", um einen zu erstellen und zu setzen.',
'name' => 'Anwendungsschlüssel ist gesetzt',
],
'cache_prefix_is_set' => [
'message' => 'Ein fehlendes Cache-Prefix könnte in Shared-Hosting-Umgebungen Probleme verursachen wegen parallelem Zugriff auf Cache-Schlüssel. Setze ein eigenes "CACHE_PREFIX" in der .env Datei.',
'name' => 'Cache prefix ist gesetzt'
],
'composer_with_dev_dependencies_is_up_to_date' => [
'message' => 'Die Composer Abhängigkeiten sind nicht aktuell. Nutze "composer install", um diese zu aktualisieren. :more',
'name' => 'Composer Abhängigkeiten (inkl. dev) sind aktuell',
],
'composer_without_dev_dependencies_is_up_to_date' => [
'message' => 'Die Composer Abhängigkeiten sind nicht aktuell. Nutze "composer install", um diese zu aktualisieren. :more',
'name' => 'Composer Abhängigkeiten (ohne dev) sind aktuell',
],
'configuration_is_cached' => [
'message' => 'Die Konfiguration sollte für bessere Performance gecached sein im Produktivbetrieb. Nutze "php artisan config:cache", um den Konfigurations-Cache zu erstellen.',
'name' => 'Konfiguration ist gecached',
],
'configuration_is_not_cached' => [
'message' => 'Die Konfiguration sollte während der Entwicklung nicht gecached sein. Nutze "php artisan config:clear", um den Konfigurations-Cache zu leeren.',
'name' => 'Konfiguration ist nicht gecached',
],
'correct_php_version_is_installed' => [
'message' => 'Die benötigte PHP Version ist nicht installiert.' . PHP_EOL . 'Benötigt: :required' . PHP_EOL . 'In Verwendung: :used',
'name' => 'Die richtige PHP Version ist installiert',
],
'database_can_be_accessed' => [
'message' => 'Auf die Datenbank kann nicht zugegriffen werden: :error',
'name' => 'Die Datenbank ist erreichbar',
],
'debug_mode_is_not_enabled' => [
'message' => 'Der Debugging-Modus sollte im Produktivbetrieb nicht genutzt werden. Setze "APP_DEBUG" in der .env Datei auf "false".',
'name' => 'Der Debugging-Modus ist deaktiviert',
],
'directories_have_correct_permissions' => [
'message' => 'Folgende Verzeichnisse sind nicht beschreibbar:' . PHP_EOL .':directories',
'name' => 'Alle Verzeichnisse haben die richtigen Berechtigungen',
],
'env_file_exists' => [
'message' => 'Die .env Datei existiert nicht. Bitte kopiere die Datei .env.example zu .env und passe diese entsprechend an.',
'name' => 'Die Umgebungsvariablendatei existiert',
],
'example_environment_variables_are_set' => [
'message' => 'Folgende Umgebungsvariablen fehlen im .env Umgebungsfile, sind aber in .env.example definiert:' . PHP_EOL . ':variables',
'name' => 'Die Beispiel-Umgebungsvariablen sind gesetzt',
],
'locales_are_installed' => [
'message' => [
'cannot_run_on_windows' => 'Dieser Check kann unter Windows nicht ausgeführt werden..',
'locale_command_not_available' => 'Der Befehl "locale -a" ist auf dem aktuellen System nicht verfügbar.',
'missing_locales' => 'Folgende Sprachumgebungen (locales) fehlen:' . PHP_EOL . ':locales',
'shell_exec_not_available' => 'Die Funktion "shell_exec" ist entweder nicht definiert oder deaktiviert, daher können die Sprachumgebungen nicht abgefragt werden.',
],
'name' => 'Benötigte Sprachumgebungen sind installiert',
],
'maintenance_mode_not_enabled' => [
'message' => 'Der Wartungsmodus ist noch aktiv. Deaktiviere ihn mit "php artisan up".',
'name' => 'Wartungsmodus ist nicht aktiv',
],
'migrations_are_up_to_date' => [
'message' => [
'need_to_migrate' => 'Die Datenbank muss aktualisiert werden. Nutze "php artisan migrate", um die Migrationen einzuspielen.',
'unable_to_check' => 'Die Migrationen konnten nicht geprüft werden: :reason',
],
'name' => 'Die Migrationen sind aktuell',
],
'php_extensions_are_disabled' => [
'message' => 'Die folgenden Erweiterungen sind noch immer aktiviert:' . PHP_EOL . ':extensions',
'name' => 'Unerwünschte PHP Erweiterungen sind deaktiviert',
],
'php_extensions_are_installed' => [
'message' => 'Die folgenden Erweiterungen fehlen:' . PHP_EOL . ':extensions',
'name' => 'Die benötigten PHP Erweiterungen sind installiert',
],
'redis_can_be_accessed' => [
'message' => [
'not_accessible' => 'Auf den Redis Cache kann nicht zugegriffen werden: :error',
'default_cache' => 'Der Standard-Cache ist nicht erreichbar.',
'named_cache' => 'Der Cache :name ist nicht erreichbar.',
],
'name' => 'Der Redis Cache ist erreichbar',
],
'routes_are_cached' => [
'message' => 'Die Routen sollten für bessere Performance gecached sein im Produktivbetrieb. Nutze "php artisan route:cache", um den Routen-Cache zu erstellen.',
'name' => 'Routen sind gecached',
],
'routes_are_not_cached' => [
'message' => 'Die Routen sollten während der Entwicklung nicht gecached sein. Nutze "php artisan route:clear", um den Routen-Cache zu leeren.',
'name' => 'Routen sind nicht gecached',
],
'servers_are_pingable' => [
'message' => "Der Server ':host' (Port: :port) ist nicht erreichbar (Timeout nach :timeout Sekunden).",
'name' => 'Benötigte Server sind pingbar',
],
'storage_directory_is_linked' => [
'message' => 'Das Speicherverzeichnis ist nicht verlinkt. Nutze "php artisan storage:link", um eine symbolische Verknüpfung zu erstellen.',
'name' => 'Das Speicherverzeichnis ist verlinkt',
],
'supervisor_programs_are_running' => [
'message' => [
'cannot_run_on_windows' => 'Dieser Check kann unter Windows nicht ausgeführt werden..',
'not_running_programs' => 'Die folgenden Programme laufen nicht oder benötigen einen Neustart:' . PHP_EOL . ':programs',
'shell_exec_not_available' => 'Die Funktion "shell_exec" ist entweder nicht definiert oder deaktiviert, daher können die laufenden Programme nicht abgefragt werden.',
'supervisor_command_not_available' => 'Der Befehl "supervisorctl" ist auf dem aktuellen System nicht verfügbar.',
],
'name' => 'Alle supervisor Programme sind in Betrieb',
],
];
Loading