Code Monkey home page Code Monkey logo

laravel-self-diagnosis's Introduction

Perform Self-Diagnosis Tests On Your Laravel Application

Latest Version on Packagist Total Downloads

This package allows you to run self-diagnosis tests on your Laravel application. It comes with multiple checks out of the box and allows you to add custom checks yourself.

Here is an example output of the command:

All Checks passed

Included checks

  • Is the APP_KEY set?
  • Are your composer dependencies up to date with the composer.lock file?
  • Do you have the correct PHP version installed?
  • Do you have the correct PHP extensions installed?
  • Can a connection to the database be established?
  • Do the storage and bootstrap/cache directories have the correct permissions?
  • Does the .env file exist?
  • Is the maintenance mode disabled?
  • Are the required locales installed on the system?
  • Are there environment variables that exist in .env.example but not in .env?
  • Are there any migrations that need to be run?
  • Is the storage directory linked?
  • Can Redis be accessed?

Development environment checks

  • Is the configuration not cached?
  • Are the routes not cached?
  • Are there environment variables that exist in .env but not in .env.example?

Production environment checks

  • Is the configuration cached?
  • Are the routes cached?
  • Is the xdebug PHP extension disabled?
  • Is APP_DEBUG set to false?
  • Are certain servers reachable?
  • Are certain supervisor programs running?

Installation

You can install the package via composer:

composer require beyondcode/laravel-self-diagnosis

Usage

Just call the artisan command to start the checks:

php artisan self-diagnosis

Customization

You can publish the configuration file, that contains all available checks using:

php artisan vendor:publish --provider=BeyondCode\\SelfDiagnosis\\SelfDiagnosisServiceProvider

This will publish a self-diagnosis.php file in your config folder. This file contains all the checks that will be performed on your application.

<?php

return [

    /*
     * A list of environment aliases mapped to the actual environment configuration.
     */
    'environment_aliases' => [
        'prod' => 'production',
        'live' => 'production',
        'local' => 'development',
    ],

    /*
     * Common checks that will be performed on all environments.
     */
    'checks' => [
        \BeyondCode\SelfDiagnosis\Checks\AppKeyIsSet::class,
        \BeyondCode\SelfDiagnosis\Checks\CorrectPhpVersionIsInstalled::class,
        \BeyondCode\SelfDiagnosis\Checks\DatabaseCanBeAccessed::class => [
            'default_connection' => true,
            'connections' => [],
        ],
        \BeyondCode\SelfDiagnosis\Checks\DirectoriesHaveCorrectPermissions::class => [
            'directories' => [
                storage_path(),
                base_path('bootstrap/cache'),
            ],
        ],
        \BeyondCode\SelfDiagnosis\Checks\EnvFileExists::class,
        \BeyondCode\SelfDiagnosis\Checks\ExampleEnvironmentVariablesAreSet::class,
        \BeyondCode\SelfDiagnosis\Checks\LocalesAreInstalled::class => [
            'required_locales' => [
                'en_US',
                'en_US.utf8',
            ],
        ],
        \BeyondCode\SelfDiagnosis\Checks\MaintenanceModeNotEnabled::class,
        \BeyondCode\SelfDiagnosis\Checks\MigrationsAreUpToDate::class,
        \BeyondCode\SelfDiagnosis\Checks\PhpExtensionsAreInstalled::class => [
            'extensions' => [
                'openssl',
                'PDO',
                'mbstring',
                'tokenizer',
                'xml',
                'ctype',
                'json',
            ],
            'include_composer_extensions' => true,
        ],
        \BeyondCode\SelfDiagnosis\Checks\StorageDirectoryIsLinked::class,
    ],

    /*
     * Environment specific checks that will only be performed for the corresponding environment.
     */
    'environment_checks' => [
        'development' => [
            \BeyondCode\SelfDiagnosis\Checks\ComposerWithDevDependenciesIsUpToDate::class => [
                'additional_options' => '--ignore-platform-reqs',
            ],
            \BeyondCode\SelfDiagnosis\Checks\ConfigurationIsNotCached::class,
            \BeyondCode\SelfDiagnosis\Checks\RoutesAreNotCached::class,
        ],
        'production' => [
            \BeyondCode\SelfDiagnosis\Checks\ComposerWithoutDevDependenciesIsUpToDate::class => [
                'additional_options' => '--ignore-platform-reqs',
            ],
            \BeyondCode\SelfDiagnosis\Checks\ConfigurationIsCached::class,
            \BeyondCode\SelfDiagnosis\Checks\DebugModeIsNotEnabled::class,
            \BeyondCode\SelfDiagnosis\Checks\PhpExtensionsAreDisabled::class => [
                'extensions' => [
                    'xdebug',
                ],
            ],
            \BeyondCode\SelfDiagnosis\Checks\RedisCanBeAccessed::class => [
                'default_connection' => true,
                'connections' => [],
            ],
            \BeyondCode\SelfDiagnosis\Checks\RoutesAreCached::class,
            \BeyondCode\SelfDiagnosis\Checks\ServersArePingable::class => [
                'servers' => [
                    'www.google.com',
                    ['host' => 'www.google.com', 'port' => 8080],
                    '8.8.8.8',
                    ['host' => '8.8.8.8', 'port' => 8080, 'timeout' => 5],
                ],
            ],
            \BeyondCode\SelfDiagnosis\Checks\SupervisorProgramsAreRunning::class => [
                'programs' => [
                    'horizon',
                ],
                'restarted_within' => 300, // max seconds since last restart, 0 to disable check
            ],
        ],
    ],

];

Available Configuration Options

The following options are available for the individual checks:

Custom Checks

You can create custom checks, by implementing the BeyondCode\SelfDiagnosis\Checks\Check interface and adding the class to the config file. Like this:

<?php

use BeyondCode\SelfDiagnosis\Checks\Check;

class MyCustomCheck implements Check
{
    /**
     * The name of the check.
     *
     * @param array $config
     * @return string
     */
    public function name(array $config): string
    {
        return 'My custom check.';
    }

    /**
     * Perform the actual verification of this check.
     *
     * @param array $config
     * @return bool
     */
    public function check(array $config): bool
    {
        return true;
    }

    /**
     * The error message to display in case the check does not pass.
     *
     * @param array $config
     * @return string
     */
    public function message(array $config): string
    {
        return 'This is the error message that users see if "check" returns false.';
    }
}

Example Output

Some Checks failed

Testing

composer test

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email [email protected] instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

laravel-self-diagnosis's People

Contributors

bagoesz21 avatar claytonrcarter avatar dbpolito avatar ejunker avatar filipac avatar fitztrev avatar francislavoie avatar jaybizzle avatar kbond avatar langeuh avatar ltkort avatar mazedlx avatar mborek-elastique avatar mechelon avatar mikebronner avatar moogyg avatar mpociot avatar namoshek avatar rodrigopedra avatar roennow avatar schnoop avatar seofood avatar squiaios avatar tvbeek avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

laravel-self-diagnosis's Issues

Support for lumen

HI

I am doing API development in Lumen. Can you please add support for lumen?

Thanks

Request: validate composer, package.json

Please add a test for composer validate
If package.json exists, run npm audit
Check that roave/security-advisories: dev-master is in composer.json
It should be the only package as dev-master, which can affect composer validate
Composer Validate should handle semver checking, but you may wish to roll your own, to accommodate user configurable checks for these prefix/suffixes:

  • ^1.2.3
  • ~1.2.3
  • 1.2.*
    Of course, Composer Validate does much more, including composer.lock checks.

[Question] PhpExtensionsAreInstalled getExtensionsRequiredInComposerFile

While writing a test for the PhpExtensionsAreInstalled (as part of #60 )

I did check the getExtensionsRequiredInComposerFile function. But now I'm questioning, how can it fail on extensions from composer if they are already installed?

Because composer will validate the extensions before installing any package it shouldn't be possible to install a package with a requirement that isn't installed. So I suspect that the function is in fact not useful or do I missing something?

Is there a way to add --ignore-platform-reqs to the automatic composer update call?

Awesome job on self-diagnosis!

I'm running on Windows with Laravel Horizon. Horizon requires the ext-pcntl php extension which isn't available for Windows (sad for me). So, to get around it I run

composer update --ignore-platform-reqs ext-pcntl

This way I can still work with Horizon on my unix production server.
Is there a way to add the --ignore-platform-reqs flag to laravel-self-diagnosis? If not, then I get the output in the screenshot below.

Thanks!

image

Install fails in new 5.6 project

$ composer require beyondcode/laravel-self-diagnosis
Using version ^0.2.0 for beyondcode/laravel-self-diagnosis
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for beyondcode/laravel-self-diagnosis ^0.2.0 -> satisfiable by beyondcode/laravel-self-diagnosis[0.2.0].
    - Conclusion: remove vlucas/phpdotenv v2.4.0
    - Conclusion: don't install vlucas/phpdotenv v2.4.0
    - beyondcode/laravel-self-diagnosis 0.2.0 requires vlucas/phpdotenv ~2.5 -> satisfiable by vlucas/phpdotenv[2.5.x-dev, v2.5.0].
    - Can only install one of: vlucas/phpdotenv[2.5.x-dev, v2.4.0].
    - Can only install one of: vlucas/phpdotenv[v2.5.0, v2.4.0].
    - Installation request for vlucas/phpdotenv (locked at v2.4.0) -> satisfiable by vlucas/phpdotenv[v2.4.0].


Installation failed, reverting ./composer.json to its original content.

Can I give you any further info?

Error when running on lumen

I get the following error when running this on lumen

Call to undefined method Laravel\Lumen\Application::configurationIsCached()

Checker for php.ini options

For my project I've implemented checker for php.ini options. Configuration looks like this:

\App\Libraries\SelfDiagnosis\Checks\PhpIniOptions::class                  => [
    'options' => [
        'upload_max_filesize' => '>=128M',
        'post_max_size'       => '>=128M',
        'memory_limit'        => '>=128M',
        'max_input_vars'      => '>=10000',
        'file_uploads'        => '1',
        'disable_functions'   => '',
    ],
],

If project owners will be interested, I can send PR

Locale check failing

Result is: "The function "shell_exec" is not defined or disabled, so we cannot check the locales."

shell_exec('locale -a') works when running from php artisan tinker, but not from the Locale checker.

The isFunctionAvailable() method incorrectly returns false. I think it's because of this conditional:

true === stripos(ini_get('disable_functions'), $function)

My disable_functions is empty in my php.ini.

Laravel 8 + cache config issue

It seems there is problem with ExampleEnvironmentVariablesAreSet and Laravel 8.

Before upgrade, when I had config cached this checker was working without any problem. But after upgrade to Laravel 8, it shows that all variables are missing in .env file but are defined in .env.example when I have config cached.

But when I run php artisan config:clear then checker is working fine again.

StorageDirectoryIsLinked fails on Windows

I'm running Windows 10 with Laravel Homestead. After doing some research on symbolic linking, Windows does not support symbolic links and the filetype() helper function will return dir instead of link. This will cause StorageDirectoryIsLinked to fail. Perhaps an alteration such as this will suffice?

StorageDirectoryIsLinked.php :

    /**
     * Perform the actual verification of this check.
     *
     * @return bool
     */
    public function check(): bool
    {
        try {
            return in_array($this->filesystem->type(public_path('storage')), ['link', 'dir']);
        } catch (\Exception $e) {
            return false;
        }
    }

Let me know about the above I can do a PR if you would like.

Thanks.

Check ExampleEnvironmentVariablesAreSet doesn't check actual environment variables

What

The check ExampleEnvironmentVariablesAreSet only compares the .env.example with the .env file. It would make sense to check if actual environment variables are set too.

Why

We're running a laravel project in Kubernetes. In the production container there is no .env file, but instead the environment variables are set on the container directly. We want to run the ExampleEnvironmentVariablesAreSet as "init container" to be sure that the container doesn't start with missing environment variables.

Proposed fix

Also check the actual environment variables (getenv()), don't just compare the .env file.

Storage directory check

I think, if you use Xampp, all checks were done and the storage directory was linked, then your tool doesn't recognize that the storage directory has been set up.

On the other hand, if you use Homestead, you don't have that issue.

Remove schema prefix in ServersArePingable check

It would be very useful if there was an option per host for removing schema prefix (http://, https://), because when I want to use hostname from the config, like config('app.url'), it's very inconvenient to remove prefixes for each host.
Something like:

\BeyondCode\SelfDiagnosis\Checks\ServersArePingable::class => [
    'servers' => [
        [
            'host'    => config('app.url'),
            'port'    => 80,
            'timeout' => 1,
            'remove_schema' => true,
        ],
    ]
]

@mpociot If you agree with the idea, I can implement and send PR

PhpExtensionsAreDisabled error message is not translated

In PhpExtensionsAreDisabled.php there is a misspelling :

public function message(array $config): string
    {
        return trans('self-dianosis::checks.php_extensions_are_disabled.message', [
            'extensions' => $this->extensions->implode(PHP_EOL),
        ]);
    }

So the error is never translated.

Please replace self-dianosis by self-diagnosis.

Thanks!

Checker for the available disk space

For my project, I've implemented checker for the available disk space. Configuration looks like this:

\App\Libraries\SelfDiagnosis\Checks\AvailableDiskSpace::class => [
    'paths' => [
        '/' => '100G', // At least 100G should be available for the path "/"
        '/var/www' => '5G',
    ],
],

If project maintainers will be interested, I can send PR

Laravel 7 compatibility

Laravel 7 depends on "vlucas/phpdotenv": "^4.0"

This breaks the ExampleEnvironmentVariablesAreSet and ExampleEnvironmentVariablesAreUpToDate Checks because the Dotenv::create interface has changed.

Something like this works, but is not backwards compatible:

    $examples = Dotenv::create(
        Env::getRepository(),
        base_path(), '.env.example');
    $actual = Dotenv::create(
        Env::getRepository(),
        base_path(), '.env');
    $this->envVariables = Collection::make($actual->safeLoad())
        ->diffKeys($examples->safeLoad())->keys();

    return $this->envVariables->isEmpty();

I did create a fork but I ended up in dependency hell trying to get everything to play nicely :(

installDryRun vs updateDryRun

In my experience, if a composer.lock file is preset and the versions of the installed dependencies match with the "locked" versions, composer install --dry-run will always return Nothing to install or update. It will not check if "composer dependencies [are] up to date", but this is what the check is about, isn't it?

Make configuration more flexible

I think there would be major advantages if we adjusted the configuration to something like the following (please be aware that the check configs do not need to make any sense, it is only for illustration; also shortened the config a bit...):

return [

    /*
     * Common checks that will be performed on all environments.
     */
    'checks' => [
        \BeyondCode\SelfDiagnosis\Checks\AppKeyIsSet::class,
        \BeyondCode\SelfDiagnosis\Checks\CorrectPhpVersionIsInstalled::class,
        \BeyondCode\SelfDiagnosis\Checks\DatabaseCanBeAccessed::class => [
            'check_db_version' => true,
            'required_version' => '>= '14.7.3',
        ],
    ],

    /*
     * Environment specific checks.
     */
    'environment_checks' => [
        'production' => [
            \BeyondCode\SelfDiagnosis\Checks\Production\XDebugIsNotEnabled::class,
            \BeyondCode\SelfDiagnosis\Checks\Production\DebugModeIsNotEnabled::class,
            \BeyondCode\SelfDiagnosis\Checks\SupervisorJobRunning::class => [
                'runs_less_than' => 300, // seconds since last restart
            ],
        ],
        'development' => [
            \BeyondCode\SelfDiagnosis\Checks\Development\ConfigurationIsNotCached::class,
            \BeyondCode\SelfDiagnosis\Checks\Development\RoutesAreNotCached::class,
        ],
        'staging' => [
            \BeyondCode\SelfDiagnosis\Checks\Production\ExtensionsAreNotEnabled::class => [
                'extensions' => ['xdebug','zlib'],
            ],
            \BeyondCode\SelfDiagnosis\Checks\Development\RoutesAreNotCached::class,
        ],
    ],

];

(Please note that I added the not existing checks SupervisorJobRunning and ExtensionsAreNotEnabled in the example to illustrate nice use cases.)

Clearly, this would require us to change the existing Check interface slightly:

interface Check
{
    /**
     * Perform the actual verification of this check.
     *
     * @param array $config
     * @return bool
     */
    public function check(array $config) : bool;
}

(It is discussable if the $config should also be passed to the other functions, especially the message() function for error reporting. Or if it should simply be passed to the checks constructor (not enforceable via interface).)

If the currently existing part of the configuration where different aliases are mapped to the production environment is required, it can easily be added to the new configuration as simple mapping:

/*
 * A list of environment aliases mapped to the actual environment configuration.
 */
'environment_aliases' => [
    'prod' => 'production',
    'live' => 'production',
],

Please let me know what you think of this as it suggests no backwards-compatible change. Of course I would be willing to implement it if it is considered a good idea.

Package Documentation via github-pages

Taking reference to #35, I wonder what would be best to use for easy usage in future:

  • a separate gh-pages branch where we only keep documentation files
  • a new docs folder for the documentation

I saw that the docs folder is ignored in .gitignore - is this for a particular reason or can we use the docs folder for the documentation? My personal preference would be to not have a separate branch as this makes PRs for code changes that require documentation changes a lot harder (it actually requires two PRs every time).

Not working in laravel 8.6

I have try to install but it gives me this error

Using version ^1.4 for beyondcode/laravel-self-diagnosis ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Your requirements could not be resolved to an installable set of packages.

Problem 1 - Conclusion: don't install beyondcode/laravel-self-diagnosis 1.4.3 - Conclusion: don't install beyondcode/laravel-self-diagnosis 1.4.2 - Conclusion: don't install beyondcode/laravel-self-diagnosis 1.4.1 - Conclusion: remove laravel/framework v8.6.0 - Installation request for beyondcode/laravel-self-diagnosis ^1.4 -> satisfiable by beyondcode/laravel-self-diagnosis[1.4.0, 1.4.1, 1.4.2, 1.4.3]. - Conclusion: don't install laravel/framework v8.6.0 - beyondcode/laravel-self-diagnosis 1.4.0 requires illuminate/support 5.2.*|5.3.*|5.4.*|5.5.*|5.6.*|5.7.*|5.8.*|^6.0|^7.0 -> satisfiable by illuminate/support[5.2.x-dev, 5.3.x-dev, 5.4.x-dev, 5.5.x-dev, 5.6.x-dev, 5.7.17, 5.7.18, 5.7.19, 5.7.x-dev, 5.8.x-dev, 6.x-dev, 7.x-dev, v5.2.0, v5.2.19, v5.2.21, v5.2.24, v5.2.25, v5.2.26, v5.2.27, v5.2.28, v5.2.31, v5.2.32, v5.2.37, v5.2.43, v5.2.45, v5.2.6, v5.2.7, v5.3.0, v5.3.16, v5.3.23, v5.3.4, v5.4.0, v5.4.13, v5.4.17, v5.4.19, v5.4.27, v5.4.36, v5.4.9, v5.5.0, v5.5.16, v5.5.17, v5.5.2, v5.5.28, v5.5.33, v5.5.34, v5.5.35, v5.5.36, v5.5.37, v5.5.39, v5.5.40, v5.5.41, v5.5.43, v5.5.44, v5.6.0, v5.6.1, v5.6.10, v5.6.11, v5.6.12, v5.6.13, v5.6.14, v5.6.15, v5.6.16, v5.6.17, v5.6.19, v5.6.2, v5.6.20, v5.6.21, v5.6.22, v5.6.23, v5.6.24, v5.6.25, v5.6.26, v5.6.27, v5.6.28, v5.6.29, v5.6.3, v5.6.30, v5.6.31, v5.6.32, v5.6.33, v5.6.34, v5.6.35, v5.6.36, v5.6.37, v5.6.38, v5.6.39, v5.6.4, v5.6.5, v5.6.6, v5.6.7, v5.6.8, v5.6.9, v5.7.0, v5.7.1, v5.7.10, v5.7.11, v5.7.15, v5.7.2, v5.7.20, v5.7.21, v5.7.22, v5.7.23, v5.7.26, v5.7.27, v5.7.28, v5.7.3, v5.7.4, v5.7.5, v5.7.6, v5.7.7, v5.7.8, v5.7.9, v5.8.0, v5.8.11, v5.8.12, v5.8.14, v5.8.15, v5.8.17, v5.8.18, v5.8.19, v5.8.2, v5.8.20, v5.8.22, v5.8.24, v5.8.27, v5.8.28, v5.8.29, v5.8.3, v5.8.30, v5.8.31, v5.8.32, v5.8.33, v5.8.34, v5.8.35, v5.8.36, v5.8.4, v5.8.8, v5.8.9, v6.0.0, v6.0.1, v6.0.2, v6.0.3, v6.0.4, v6.1.0, v6.10.0, v6.11.0, v6.12.0, v6.13.0, v6.13.1, v6.14.0, v6.15.0, v6.15.1, v6.16.0, v6.17.0, v6.17.1, v6.18.0, v6.18.1, v6.18.10, v6.18.11, v6.18.12, v6.18.13, v6.18.14, v6.18.15, v6.18.16, v6.18.17, v6.18.18, v6.18.19, v6.18.2, v6.18.20, v6.18.21, v6.18.22, v6.18.23, v6.18.24, v6.18.25, v6.18.26, v6.18.27, v6.18.28, v6.18.29, v6.18.3, v6.18.30, v6.18.31, v6.18.32, v6.18.33, v6.18.34, v6.18.35, v6.18.36, v6.18.37, v6.18.38, v6.18.39, v6.18.4, v6.18.40, v6.18.5, v6.18.6, v6.18.7, v6.18.8, v6.18.9, v6.2.0, v6.3.0, v6.4.1, v6.5.0, v6.5.1, v6.5.2, v6.6.0, v6.6.1, v6.6.2, v6.7.0, v6.8.0, v7.0.0, v7.0.1, v7.0.2, v7.0.3, v7.0.4, v7.0.5, v7.0.6, v7.0.7, v7.0.8, v7.1.0, v7.1.1, v7.1.2, v7.1.3, v7.10.0, v7.10.1, v7.10.2, v7.10.3, v7.11.0, v7.12.0, v7.13.0, v7.14.0, v7.14.1, v7.15.0, v7.16.0, v7.16.1, v7.17.0, v7.17.1, v7.17.2, v7.18.0, v7.19.0, v7.19.1, v7.2.0, v7.2.1, v7.2.2, v7.20.0, v7.21.0, v7.22.0, v7.22.1, v7.22.2, v7.22.3, v7.22.4, v7.23.0, v7.23.1, v7.23.2, v7.24.0, v7.25.0, v7.26.0, v7.26.1, v7.27.0, v7.28.0, v7.28.1, v7.28.2, v7.28.3, v7.3.0, v7.4.0, v7.5.0, v7.5.1, v7.5.2, v7.6.0, v7.6.1, v7.6.2, v7.7.0, v7.7.1, v7.8.0, v7.8.1, v7.9.0, v7.9.1, v7.9.2]. - don't install illuminate/support 6.x-dev|don't install laravel/framework v8.6.0 - don't install illuminate/support 7.x-dev|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.0.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.0.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.0.2|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.0.3|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.0.4|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.1.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.10.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.11.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.12.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.13.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.13.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.14.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.15.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.15.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.16.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.17.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.17.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.10|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.11|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.12|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.13|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.14|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.15|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.16|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.17|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.18|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.19|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.2|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.20|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.21|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.22|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.23|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.24|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.25|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.26|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.27|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.28|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.29|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.3|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.30|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.31|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.32|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.33|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.34|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.35|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.36|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.37|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.38|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.39|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.4|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.40|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.5|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.6|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.7|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.8|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.18.9|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.2.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.3.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.4.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.5.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.5.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.5.2|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.6.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.6.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.6.2|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.7.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v6.8.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.0.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.0.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.0.2|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.0.3|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.0.4|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.0.5|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.0.6|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.0.7|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.0.8|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.1.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.1.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.1.2|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.1.3|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.10.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.10.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.10.2|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.10.3|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.11.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.12.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.13.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.14.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.14.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.15.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.16.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.16.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.17.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.17.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.17.2|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.18.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.19.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.19.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.2.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.2.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.2.2|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.20.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.21.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.22.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.22.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.22.2|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.22.3|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.22.4|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.23.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.23.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.23.2|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.24.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.25.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.26.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.26.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.27.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.28.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.28.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.28.2|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.28.3|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.3.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.4.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.5.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.5.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.5.2|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.6.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.6.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.6.2|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.7.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.7.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.8.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.8.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.9.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.9.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v7.9.2|don't install laravel/framework v8.6.0 - don't install illuminate/support 5.5.x-dev|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.5.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.5.16|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.5.17|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.5.2|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.5.28|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.5.33|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.5.34|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.5.35|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.5.36|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.5.37|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.5.39|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.5.40|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.5.41|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.5.43|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.5.44|don't install laravel/framework v8.6.0 - don't install illuminate/support 5.6.x-dev|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.10|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.11|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.12|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.13|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.14|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.15|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.16|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.17|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.19|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.2|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.20|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.21|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.22|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.23|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.24|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.25|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.26|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.27|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.28|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.29|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.3|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.30|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.31|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.32|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.33|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.34|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.35|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.36|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.37|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.38|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.39|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.4|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.5|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.6|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.7|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.8|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.6.9|don't install laravel/framework v8.6.0 - don't install illuminate/support 5.7.17|don't install laravel/framework v8.6.0 - don't install illuminate/support 5.7.18|don't install laravel/framework v8.6.0 - don't install illuminate/support 5.7.19|don't install laravel/framework v8.6.0 - don't install illuminate/support 5.7.x-dev|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.7.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.7.1|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.7.10|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.7.11|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.7.15|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.7.2|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.7.20|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.7.21|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.7.22|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.7.23|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.7.26|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.7.27|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.7.28|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.7.3|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.7.4|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.7.5|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.7.6|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.7.7|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.7.8|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.7.9|don't install laravel/framework v8.6.0 - don't install illuminate/support 5.8.x-dev|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.11|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.12|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.14|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.15|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.17|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.18|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.19|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.2|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.20|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.22|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.24|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.27|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.28|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.29|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.3|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.30|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.31|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.32|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.33|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.34|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.35|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.36|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.4|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.8|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.8.9|don't install laravel/framework v8.6.0 - don't install illuminate/support 5.2.x-dev|don't install laravel/framework v8.6.0 - don't install illuminate/support 5.3.x-dev|don't install laravel/framework v8.6.0 - don't install illuminate/support 5.4.x-dev|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.2.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.2.19|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.2.21|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.2.24|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.2.25|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.2.26|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.2.27|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.2.28|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.2.31|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.2.32|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.2.37|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.2.43|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.2.45|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.2.6|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.2.7|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.3.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.3.16|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.3.23|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.3.4|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.4.0|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.4.13|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.4.17|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.4.19|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.4.27|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.4.36|don't install laravel/framework v8.6.0 - don't install illuminate/support v5.4.9|don't install laravel/framework v8.6.0 - Installation request for laravel/framework (locked at v8.6.0, required as ^8.0) -> satisfiable by laravel/framework[v8.6.0].

Installation failed, reverting ./composer.json to its original content.

Exit code on test failing

When test failed - exit code eq 0. This is not goot for CI integration - I cannot check command result like this:

php ./artisan self-diagnosis && { echo "All is ok"; } || { echo "ERROR!"; exit; };

Doesn't work with laravel 5.2

laravel-self-diagnosis: 0.3.0
laravel 5.2
os: mac HighSierra
php: 7.1

Hello!
Installed without problem, but seems it doesn't work together with laravel 5.2.
The self-siagnose artisan command doesn't even appear in the list of the commands available.

Class 'Memcached' not found

I am trying to use in lumen. I am using Redis for caching. but it gives following error

Class 'Memcached' not found

`Thanks

Suggestion: Use translations for messaging

At the moment, the message strings returned for each check are tied to the classes themselves. There is no way for the end user to specify their own language, if they would like to.

Example for \BeyondCode\SelfDiagnosis\Checks\ComposerIsUpToDate:

public function message() : string
{
-    return 'Your composer dependencies are not up to date. Call "composer install".' . $this->output;
+    return trans('self-diagnosis.composer-is-up-to-date') . $this->output;
}

Allow configuration to override locale

Hello, thank you for the great package, it is indeed very useful! :)

Wanted just to ask if it would be possibile to add the option in the config file to override the locale used by the package, since I am located in Italy and now to use the package I would need to translate all the strings to Italian, which I am not that interested. Since deployments scripts and code are usually written in english, I would actually prefer to have the messages in english.

Thank you in advance!

Fabio

Fix missing locales

I am receiving the following error after running diagnostic

The following locales are missing:
en_US.utf8

How does one go about fixing this issue? I created a new laravel app for testing purposes so it is a clean system so to speak

New Release for PHP8 Support

While there was a PR that was accepted to add PHP 8 support there has been no release since then and 1.5.0 does not have the php8 pr in it.

Please submit a new release.

Error when use PHPRedis

I am using phpredis driver and getting multiple errors on RedisCanBeAccessed check.

When phpredis is used as a Redis driver:

  1. Redis facade should not be used in the code, it does not exist at all
  2. $connection->connect() is redundant for phpredis driver and throws error "Redis::connect() expects at least 1 parameter, 0 given"

New release/tag

Would it be possible to tag a new (major?) version, as php 8 is allowed in composer.json but only on the main branch?

Laravel 6.2 compatibility

I have just installed this in a fresh Laravel 6.2 app and it seems there are some inconsistencies.

The Environment specific checks do not work because the way for fetching the environment is broken - is getting only null.

That is the only thing I noticed is not working, but that makes me think if the package should be restrained to 5.8, and a new version only - when adjusted accordingly - be available for 6.x.

Incorrect php extension parsing in Laravel Sail

Running this package in Laravel sail returns an incorrect error message:

The following extensions are missing:
imagick

Running the following command shows that imagick is actually installed:

sail php -r 'echo "imagick is ".(extension_loaded("imagick")?"":"not ")."installed\n";'

Also, sail php -m has the following output, which includes imagick:

[PHP Modules]
bcmath
calendar
Core
ctype
curl
date
dom
exif
FFI
fileinfo
filter
ftp
gd
gettext
hash
iconv
igbinary
imagick
imap
intl
json
ldap
libxml
mbstring
memcached
msgpack
mysqli
mysqlnd
openssl
pcntl
pcov
pcre
PDO
pdo_mysql
pdo_pgsql
pdo_sqlite
pgsql
Phar
posix
readline
redis
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
sqlite3
standard
swoole
sysvmsg
sysvsem
sysvshm
tokenizer
xdebug
xml
xmlreader
xmlwriter
xsl
Zend OPcache
zip
zlib

[Zend Modules]
Xdebug
Zend OPcache

I am running:

  • Laravel 8.65+
  • Laravel Sail 1.5+

Here is the self-diagnosis.php config file:

<?php

declare(strict_types=1);

use BeyondCode\SelfDiagnosis\Checks\AppKeyIsSet;
use BeyondCode\SelfDiagnosis\Checks\ComposerWithDevDependenciesIsUpToDate;
use BeyondCode\SelfDiagnosis\Checks\ComposerWithoutDevDependenciesIsUpToDate;
use BeyondCode\SelfDiagnosis\Checks\ConfigurationIsCached;
use BeyondCode\SelfDiagnosis\Checks\ConfigurationIsNotCached;
use BeyondCode\SelfDiagnosis\Checks\CorrectPhpVersionIsInstalled;
use BeyondCode\SelfDiagnosis\Checks\DatabaseCanBeAccessed;
use BeyondCode\SelfDiagnosis\Checks\DebugModeIsNotEnabled;
use BeyondCode\SelfDiagnosis\Checks\DirectoriesHaveCorrectPermissions;
use BeyondCode\SelfDiagnosis\Checks\EnvFileExists;
use BeyondCode\SelfDiagnosis\Checks\ExampleEnvironmentVariablesAreSet;
use BeyondCode\SelfDiagnosis\Checks\ExampleEnvironmentVariablesAreUpToDate;
use BeyondCode\SelfDiagnosis\Checks\HorizonIsRunning;
use BeyondCode\SelfDiagnosis\Checks\LocalesAreInstalled;
use BeyondCode\SelfDiagnosis\Checks\MaintenanceModeNotEnabled;
use BeyondCode\SelfDiagnosis\Checks\MigrationsAreUpToDate;
use BeyondCode\SelfDiagnosis\Checks\PhpExtensionsAreDisabled;
use BeyondCode\SelfDiagnosis\Checks\PhpExtensionsAreInstalled;
use BeyondCode\SelfDiagnosis\Checks\RedisCanBeAccessed;
use BeyondCode\SelfDiagnosis\Checks\RoutesAreCached;
use BeyondCode\SelfDiagnosis\Checks\RoutesAreNotCached;
use BeyondCode\SelfDiagnosis\Checks\ServersArePingable;
use BeyondCode\SelfDiagnosis\Checks\StorageDirectoryIsLinked;
use BeyondCode\SelfDiagnosis\Checks\SupervisorProgramsAreRunning;

return [

    /*
     * A list of environment aliases mapped to the actual environment configuration.
     */
    'environment_aliases' => [
        'prod' => 'production',
        'live' => 'production',
        'local' => 'development',
    ],

    /*
     * Common checks that will be performed on all environments.
     */
    'checks' => [
        AppKeyIsSet::class,
        CorrectPhpVersionIsInstalled::class,
        DatabaseCanBeAccessed::class => [
            'default_connection' => true,
            'connections' => [],
        ],
        DirectoriesHaveCorrectPermissions::class => [
            'directories' => [
                storage_path(),
                base_path('bootstrap/cache'),
            ],
        ],
        EnvFileExists::class,
        ExampleEnvironmentVariablesAreSet::class,
        // LocalesAreInstalled::class => [
        //     'required_locales' => [
        //         'en_US',
        //         PHP_OS === 'Darwin' ? 'en_US.UTF-8' : 'en_US.utf8',
        //     ],
        // ],
        MaintenanceModeNotEnabled::class,
        MigrationsAreUpToDate::class,
        PhpExtensionsAreInstalled::class => [
            'extensions' => [
                "bcmath",
                "calendar",
                "ctype",
                "curl",
                "dom",
                "exif",
                "gd",
                "iconv",
                "imagick",
                "intl",
                "json",
                "libxml",
                "mbstring",
                "mbstring",
                "openssl",
                "pcntl",
                "pcov",
                "pdo_pgsql",
                "pdo_sqlite",
                "pdo",
                "soap",
                "tokenizer",
                "xml",
                "zip",
            ],
            'include_composer_extensions' => true,
        ],
        // RedisCanBeAccessed::class => [
        //     'default_connection' => true,
        //     'connections' => ["default"],
        // ],
        StorageDirectoryIsLinked::class,
    ],

    /*
     * Environment specific checks that will only be performed for the corresponding environment.
     */
    'environment_checks' => [
        'development' => [
            ComposerWithDevDependenciesIsUpToDate::class,
            ConfigurationIsNotCached::class,
            RoutesAreNotCached::class,
            ExampleEnvironmentVariablesAreUpToDate::class,
        ],
        'production' => [
            ComposerWithoutDevDependenciesIsUpToDate::class,
            ConfigurationIsCached::class,
            DebugModeIsNotEnabled::class,
            PhpExtensionsAreDisabled::class => [
                'extensions' => [
                    'xdebug',
                ],
            ],
            RoutesAreCached::class,
            // ServersArePingable::class => [
            //    'servers' => [
            //        'www.google.com',
            //        ['host' => 'www.google.com', 'port' => 8080],
            //        '8.8.8.8',
            //        ['host' => '8.8.8.8', 'port' => 8080, 'timeout' => 5],
            //    ],
            //],
            SupervisorProgramsAreRunning::class => [
                'programs' => [
                    'horizon',
                ],
                'restarted_within' => 300,
            ],
            HorizonIsRunning::class,
        ],
    ],

];

Composer::installDryRun() calling getProcess without argument

Too few arguments to function Illuminate\Support\Composer::getProcess(), 0 passed in /vendor/beyondcode/laravel-self-diagnosis/src/Composer.php on line 9 and exactly 1 expected

Looks like Laravel 5.8 changed Illuminate\Support\Composer::getProcess() to have a required array $command argument.

Checks that have no clear outcome

While reading #64, I realized it may be possible for checks to not be performable or to not have a clear outcome. Would it make sense to print a special warning in this case?
My idea would be to introduce a third return value for checks: null

What is your take on this?

Suggestion for `PhpExtensionsAreInstalled` check: get expected PHP extensions via config

At the moment the class \BeyondCode\SelfDiagnosis\Checks\PhpExtensionsAreInstalled has a specified set of extensions to check. I think it would be useful if this could be done via config, instead, so that the end user can specify their own extensions if they want to.

Something like :

    public function check(): bool
    {
-        $this->extensions = Collection::make([
-            'openssl',
-            'PDO',
-            'mbstring',
-            'tokenizer',
-            'xml',
-            'ctype',
-            'json'
-        ]);
+       $this->extensions = Collection::make(config('self-diagnosis.php_extensions', [
+            'openssl',
+            'PDO',
+            'mbstring',
+            'tokenizer',
+            'xml',
+            'ctype',
+            'json'
+       ]));

        $this->extensions = $this->extensions->reject(function ($ext) {
            return extension_loaded($ext);
        });

        return $this->extensions->isEmpty();
    }

I am happy to make a merge request, if I can find some time over the next few days.

BTW, this package is awesome!!!! I had similar ideas to this package in the past but never got round to doing anything. Great work as always!

[Question] about testing

There isn't a lot of tests in this project, but I see it in the requirements for the project. So I suspect it is on the to do list.

I like to add some test but have some questions before starting and also like some feedback on the ideas.

  • Currently all the tests are in tests/ with only a subdirectory for fixtures. Is it good to let it match the src directory (so on this moment, add a Checks directory)
  • Is it good to mock some protected parameters on the command to validate that? It is a way that I used to do but maybe there is a better solution
  • Is a check that we get a value back sometimes enough or is it wanted to always validate the result? Like the name function on a check implementation?
  • Any other to think about / know?

I like to have at least some answers from @mpociot because it is his project, but I'm happy with other input.

Laravel 7.0.x - Dotenv\Dotenv::__construct() must implement interface Dotenv\Loader\LoaderInterface, string given, called in ExampleEnvironmentVariablesAreSet.php on line 36

Laravel 7.0.x with DotEnv 4.0.x compatibility issue

$ php artisan self-diagnosis
|-------------------------------------
| Common Checks
|-------------------------------------
Running check 1/11: App key is set...  ✔
Running check 2/11: The correct PHP version is installed...  ✔
Running check 3/11: The database can be accessed...  ✔
Running check 4/11: All directories have the correct permissions...  ✔
Running check 5/11: The environment file exists...  ✔
Running check 6/11: The example environment variables are set...  
   TypeError 

  Argument 1 passed to Dotenv\Dotenv::__construct() must implement interface Dotenv\Loader\LoaderInterface, string given, called in .../vendor/beyondcode/laravel-self-diagnosis/src/Checks/ExampleEnvironmentVariablesAreSet.php on line 36
at vendor/vlucas/phpdotenv/src/Dotenv.php:45
    41|      * @param \Dotenv\Store\StoreInterface|string[]  $store
    42|      *
    43|      * @return void
    44|      */
  > 45|     public function __construct(LoaderInterface $loader, RepositoryInterface $repository, $store)
    46|     {
    47|         $this->loader = $loader;
    48|         $this->repository = $repository;
    49|         $this->store = is_array($store) ? new FileStore($store, true) : $store;

      +18 vendor frames 
  19  artisan:37
      Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

Migration check fails

I have migrated my database correctly, still, on running self-diagnosis, it shows migrations are not up to date. You need to run php artisan migrate command.
On running this command, it shows nothing to migrate

"Your requirements could not be resolved to an installable set of packages."

I'm trying to require this for dev, but it's unable to install due to some issue with constraints:

Using version ^0.3.0 for beyondcode/laravel-self-diagnosis
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for beyondcode/laravel-self-diagnosis ^0.3.0 -> satisfiable by beyondcode/laravel-self-diagnosis[0.3.0].
    - Conclusion: remove vlucas/phpdotenv v2.4.0
    - Conclusion: don't install vlucas/phpdotenv v2.4.0
    - beyondcode/laravel-self-diagnosis 0.3.0 requires vlucas/phpdotenv ~2.5 -> satisfiable by vlucas/phpdotenv[2.5.x-dev, v2.5.0].
    - Can only install one of: vlucas/phpdotenv[2.5.x-dev, v2.4.0].
    - Can only install one of: vlucas/phpdotenv[v2.5.0, v2.4.0].
    - Installation request for vlucas/phpdotenv (locked at v2.4.0) -> satisfiable by vlucas/phpdotenv[v2.4.0].


Installation failed, reverting ./composer.json to its original content.

My dependencies:

"require": {                                  
    "php": "^7.1.3",                          
    "cakephp/chronos": "^1.1",                
    "fideloper/proxy": "^4.0",                
    "guzzlehttp/guzzle": "^6.3",              
    "laravel/framework": "5.6.*",             
    "laravel/tinker": "^1.0",                 
    "ramsey/uuid": "^3.7",                    
    "stephenhill/base58": "^1.1",             
    "symfony/psr-http-message-bridge": "^1.0",
    "tymon/jwt-auth": "^0.5.12",              
    "zendframework/zend-diactoros": "^1.8"    
},                                            
"require-dev": {                              
    "barryvdh/laravel-ide-helper": "^2.4",    
    "darkaonline/l5-swagger": "^5.6",         
    "filp/whoops": "^2.0",                    
    "fzaninotto/faker": "^1.4",               
    "mockery/mockery": "^1.0",                
    "nunomaduro/collision": "^2.0",           
    "phpunit/phpunit": "^7.0"                 
},                                            

Install fails

Hello!
When trying to install through compser, im getting the following errors.

composer require beyondcode/laravel-self-diagnosis
Using version ^0.3.0 for beyondcode/laravel-self-diagnosis
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for beyondcode/laravel-self-diagnosis ^0.3.0 -> satisfiable by beyondcode/laravel-self-diagnosis[0.3.0].
    - Conclusion: remove vlucas/phpdotenv v2.4.0
    - Conclusion: don't install vlucas/phpdotenv v2.4.0
    - beyondcode/laravel-self-diagnosis 0.3.0 requires vlucas/phpdotenv ~2.5 -> satisfiable by vlucas/phpdotenv[2.5.x-dev, v2.5.0].
    - Can only install one of: vlucas/phpdotenv[2.5.x-dev, v2.4.0].
    - Can only install one of: vlucas/phpdotenv[v2.5.0, v2.4.0].
    - Installation request for vlucas/phpdotenv (locked at v2.4.0) -> satisfiable by vlucas/phpdotenv[v2.4.0].


Installation failed, reverting ./composer.json to its original content.

Check all translation messages present or not - New feature

A new feature that will check all the response messages, mail subjects which have used the trans function and check whether a message exists in resources\lang folder if not need to show error messages with the list of translations that are not available.

Doesn't work with latest laravel version

Using:

  • Laravel 7.2.5
  • PHP 7.3.19
  • composer 1.10.8
> php artisan self-diagnosis
|-------------------------------------
| Common Checks
|-------------------------------------


   ErrorException 

  array_key_exists() expects parameter 2 to be array, null given

  at vendor/beyondcode/laravel-self-diagnosis/src/SelfDiagnosisCommand.php:33
    29| 
    30|         $environment = $this->argument('environment') ?: app()->environment();
    31|         $environmentChecks = config('self-diagnosis.environment_checks.' . $environment, []);
    32| 
  > 33|         if (empty($environmentChecks) && array_key_exists($environment, config('self-diagnosis.environment_aliases'))) {
    34|             $environment = config('self-diagnosis.environment_aliases.' . $environment);
    35|             $environmentChecks = config('self-diagnosis.environment_checks.' . $environment, []);
    36|         }
    37| 

      +15 vendor frames 
  16  artisan:37
      Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

ComposerWithDevDependenciesIsUpToDate fails due to unfullfillable platform requirements

When running the ComposerWithDevDependenciesIsUpToDate check on Windows, it may fail due to some platform requirements not being satisfiable.

Your composer dependencies are not up to date. Call "composer install" to update them. Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - laravel/horizon v1.4.0 requires ext-pcntl * -> the requested PHP extension pcntl is missing from your system.
    - laravel/horizon v1.4.0 requires ext-pcntl * -> the requested PHP extension pcntl is missing from your system.
    - Installation request for laravel/horizon v1.4.0 -> satisfiable by laravel/horizon[v1.4.0].

  To enable extensions, verify that they are enabled in your .ini files:
    - C:\laragon\bin\php\php-7.2.11-nts-Win32-VC15-x64\php.ini
  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.

This problem also affects the ComposerWithoutDevDependenciesIsUpToDate check.

A solution may be to allow for additional parameters of the call to composer install, where Windows users can set --ignore-platform-reqs.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.