Problemy

Composer: PHP Fatal error: Allowed memory size exhausted

Bardzo prawdopodobnym problemem przy instalacji (composer install) bądź aktualizacji (composer update) aplikacji będzie powyższy komunikat błędu. Wynika on z tego, że na serwerach współdzielonych ustawiony jest zbyt niski memory_limit nie wystarczający dla Composera do stworzenia zależności. Rozwiązania problemu:

  • poprosić hostingodawcę o czasowe zwiększenie wartości dostępnej pamięci, prawdopodobnie do wartości 2GB
  • skorzystać z gotowego composer.lock dla aktualnego projektu

W celu skorzystania z composer.lock należy:

  • w przypadku instalacji, zmienić nazwę pliku znajdującego się w głównym folderze domeny:
    mv .composer.lock composer.lock
  • w przypadku aktualizacji, pobrać plik z repozytorium i zmienić nazwę pliku za pomocą jednego polecenia:
    wget --no-check-certificate --content-disposition https://raw.githubusercontent.com/N1ebieski/install.idir/master/.composer.lock && mv .composer.lock composer.lock

Następnie w obu przypadkach należy ponowić instalację/aktualizację za pomocą:

composer install --no-dev

W przypadku pobierania composer.lock do istniejącej aplikacji proszę zwrócić szczególną uwagę na wersję release którego dotyczy.

MySQL: Specified key was too long error

Podczas tworzenia bazy danych w starszych wersjach bazodanowych może pojawić się powyższy problem. Najczęściej dotyczy on nazw indeksów przekraczających ustaloną długość. Rozwiązaniem problemu jest zamieszczenie w pliku app/Providers/AppServiceProvider.php konfiguracji:

use Illuminate\Support\Facades\Schema;

public function boot()
{
    Schema::defaultStringLength(191);
}

Następnie można ponowić instalację.

Niewłaściwe daty na stronie

Problem wynika ze złej (lub innej niż oczekiwana) konfiguracji strefy czasowej w pliku php.ini. Domyślne ustawienie znajduje się w pliku /config/app.php

/*
|--------------------------------------------------------------------------
| Application Timezone
|--------------------------------------------------------------------------
|
| Here you may specify the default timezone for your application, which
| will be used by the PHP date and date-time functions. We have gone
| ahead and set this to a sensible default for you out of the box.
|
*/

'timezone' => 'Europe/Warsaw',

Jeśli z jakichś przyczyn ustawienie to jest ignorowane, a nie ma możliwości zmiany bezpośrednio w pliku php.ini, należy w pliku app/Providers/AppServiceProvider.php zamieścić konfigurację:

public function register()
{
    date_default_timezone_set('Europe/Warsaw');
}


Niewłaściwe nazewnictwo miesięcy archiwum

Problem dotyczy biblioteki Carbon i wynika ze złej konfiguracji locale na serwerze. jeśli nie ma możliwości zmiany bezpośrednio w pliku php.ini, należy w pliku app/Providers/AppServiceProvider.php zamieścić konfigurację:

use Illuminate\Support\Facades\Config;

public
function register() { setlocale(LC_ALL, Config::get('app.locale_full')); }

gdzie wstrzyknięte zostanie ustawienie z pliku .env:

APP_LANG_FULL=Polish_Poland.utf8


PHP CLI z osobną ścieżką do Ioncube w php.ini

Na serwerach współdzielonych może zaistnieć sytuacja, że rozszerzenie Ioncube będzie dostępne jedynie z poziomu osobnego pliku php.ini, na przykład:

/usr/local/php73/bin/php -c /home/nazwa-usera/php73/php.ini

W takim przypadku należy:

  1. Poprawić ścieżkę do wykonania zadań Cron
  2. Stworzyć wygodny alias w pliku /.bashrc:
    alias php="/usr/local/php73/bin/php -c /home/nazwa-usera/php73/php.ini"
  3. Zmienić ścieżki post-skryptów w pliku composer.json w głównym folderze z aplikacją:
        "scripts": {
            "post-autoload-dump": [
                "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
                "/usr/local/php73/bin/php -c /home/nazwa-usera/php73/php.ini artisan package:discover --ansi"
            ],
            "post-root-package-install": [
                "/usr/local/php73/bin/php -c /home/nazwa-usera/php73/php.ini -r \"file_exists('.env') || copy('.env.example', '.env');\""
            ],
            "post-create-project-cmd": [
                "/usr/local/php73/bin/php -c /home/nazwa-usera/php73/php.ini artisan key:generate --ansi"
            ]
        }


405 Method Not Allowed

Konfiguracja serwera blokuje nie zdefiniowane metody requestów. Należy w vHoście dodać brakujące metody według poniższych przykładów:

  • dla serwera Apache:
    <Directory /sciezka-do-folderu-public>
        AllowOverride All
        AllowMethods GET HEAD POST PUT PATCH DELETE OPTIONS
    </Directory>
  • dla serwera Nginx:
    add_header Allow "GET, POST, HEAD, PUT, PATCH, DELETE, OPTIONS" always;
    if ( $request_method !~ ^(GET|POST|HEAD|PUT|PATCH|DELETE|OPTIONS)$ ) {
    return 405;
    }