Laravel проектов внезапно остановились - PullRequest
0 голосов
/ 21 марта 2020

Прежде чем вы продолжите читать - проблема была исправлена ​​

Ну ... это довольно странно.

Я работаю над веб-приложением для некоторые друзья. У меня есть рабочая версия, загруженная на их хостинг, и неожиданно она перестала работать через пару дней. go.

Я ничего не добавил и ничего не изменил на сервере. Нет ошибки, просто приложение перестало загружаться, вместо этого загружается пустая страница html.

Я проследил проблему до файла /vendor/composer/autoload_real.php.

В конце класса stati c внутри этого файла есть al oop, в который включены несколько других файлов (фактически запрашиваемых), я проверил это, когда он пытается запросить / vendor / laravel / framework /src/Illuminate/Foundation/helpers.php, система останавливается. Очевидно, я проверил, что файл там, и он не был затронут.

Ну, я уверен, что я ничего не изменил в этой части приложения (это базовая структура и я обычно не путаюсь внутри), но вдруг он перестал работать.

Рабочая копия на моем компьютере просто отлично работает. Я загрузил свою копию помощников. php, но ничего не изменилось.

Кто-нибудь недавно сталкивался с подобными проблемами? У кого-нибудь есть идеи о том, как это исправить?

РЕДАКТИРОВАТЬ: Прошло несколько дней, так как я мог проверить это в последний раз. Теперь я отслеживаю выполнение php в файле /vendor/laravel/framework/src/Illuminate/Foundation/helpers.php. Я начал выводить сообщения и пытаться выполнить только этот файл, чтобы увидеть, где остановлено выполнение кода.

Я знаю, что это очень дерьмовая отладка, но у меня нет доступа к apache, и я не могу перезапустить его, и, кажется, нет простого способа получить код ошибки без этого.

Так терпеливо пытаясь, я достиг двух точек, где выполнение этого файла останавливается:

Создание фабричного метода

if (! function_exists('factory')) {
    /**
     * Create a model factory builder for a given class, name, and amount.
     *
     * @param  dynamic  class|class,name|class,amount|class,name,amount
     * @return \Illuminate\Database\Eloquent\FactoryBuilder
     */
    function factory()
    {
        $factory = app(EloquentFactory::class);

        $arguments = func_get_args();

        if (isset($arguments[1]) && is_string($arguments[1])) {
            return $factory->of($arguments[0], $arguments[1])->times($arguments[2] ?? null);
        } elseif (isset($arguments[1])) {
            return $factory->of($arguments[0])->times($arguments[1]);
        }

        return $factory->of($arguments[0]);
    }
}

и создание метода микширования

if (! function_exists('mix')) {
    /**
     * Get the path to a versioned Mix file.
     *
     * @param  string  $path
     * @param  string  $manifestDirectory
     * @return \Illuminate\Support\HtmlString|string
     *
     * @throws \Exception
     */
    function mix($path, $manifestDirectory = '')
    {
        return app(Mix::class)(...func_get_args());
    }
}

В обоих случаях задействован func_get_args ... У меня нет указанной ошибки c, но у меня есть покалывание, что проблема в некоторой степени связана с тем, что эта функция ничего не возвращает.

РЕДАКТИРОВАТЬ 2: Хорошо, я попробовал php artisan и composer команды, предложенные для ответов безуспешно. Проблема все еще существует.

Я также удалил журналы и проверил, что при попытке загрузить сайт не было создано никакого нового журнала.

Я пробовал чистую laravel установку от scriptaculous на новый каталог (я сделал это, когда впервые загрузил сайт, он отлично работал в течение нескольких месяцев), и эта новая установка также не попадает на первую страницу. Вместо этого отображается пустая страница (на Firefox) или ошибка 500 (на Chrome).

Я забыл упомянуть важные данные. Мое приложение делит пространство с экземпляром WordPress. WordPress установлен на public_ html, а мой сайт на public_html / mySiteDirectory. Это не предполагает никаких проблем, кроме как заставить меня слегка подправить файл .htaccess, чтобы маршрутизация работала нормально.

Существует также разделенное пространство форума phpbb в его собственном каталоге внутри public_ html.

Интересно, мог ли какой-нибудь из них быть несколько обновлен и привести к такому странному результату?

Также ... laravel app_debug включен в файл .env с самого начала, но ничего не показывал. Кажется, это что-то, что терпит неудачу до полной загрузки laravel framework.

РЕДАКТИРОВАТЬ 3: ЭТО ИСПРАВЛЕНО.

Ну ... во-первых, позвольте мне Спасибо за вашу помощь. На самом деле не было ни одного ответа, который бы решал проблему, но многие из вас предлагали использовать phpInfo () для проверки php версии, что в конечном итоге привело к истинной проблеме.

Да ... удивительно, хотя php -v на терминале показал, что php 7.2 работает на сервере, а инструменты управления cpanel php показали также, что php 7.2 установлен и работает, когда я использовал phpInfo (); php 5,6 было показано в ответе.

Я использовал собственные инструменты cpanel для обновления / понижения до 7.3 и снова до 7.2 и et voilá phpInfo (); показывает 7.2, и страница снова запущена и работает.

Я постараюсь разделить награду между несколькими ответами (не знаю, возможно ли что-то подобное), и буду +1 каждый ответ, предлагая phpInfo (); как это было показано в качестве ключа к решению этой проблемы.

Если я не могу разделить награду, я приму в качестве окончательного ответа ответ «Не пани» c, поскольку именно он убедил меня в том, что возникла проблема с php версиями.

Ответы [ 6 ]

4 голосов
/ 11 апреля 2020

Если вы посмотрите на код в функциях, к которым вы отследили проблему, оба содержат интересные или менее распространенные PHP функции:

  • factory() включает ?? , нулевой оператор слияния. Это было введено в PHP 7.0 .

    Я вижу в комментарии, которые вы добавили к другому ответу, который вы используете PHP 7.2. Этот вопрос описывает Laravel сбой в factory(), потому что даже после обновления до PHP 7.2 и phpinfo(), показывающего 7.2, Apache все еще использовал PHP 5.6. Это кажется маловероятным, но когда все остальное терпит неудачу ...?

  • mix() включает ..., оператор распространения или сплата. Это было введено в PHP 5.6 , но есть сообщения о сбое в Laravel с 7.x из-за (AFAICT) из-за несоответствий между PHP версиями Apache и CLI используют.

    Учитывая, что вы упомянули, что вы загрузили код с локального компьютера (вместо использования php composer install), и что CPanel имеет тенденцию обновлять PHP автоматически и тихо, это выглядит как возможность - есть 4 PHP версий в игре (CLI / web на вашем компьютере и CLI / web на сервере), и все они должны быть синхронизированы c.

Как примечание: как вы уже обнаружили, вы действительно работаете вслепую без бревен. Либо журналы PHP и / или Apache предоставят вам больше информации, обычно описывая точно проблему, и избавят вас от необходимости вручную отслеживать вещи, как вы это делали. Если в этих журналах ничего не отображается, возможно, PHP не настроен на запись ошибок - попробуйте включить .

Возможно, это зависит от версии и конфигурации CPanel, но от стандартных расположений для ваших файлов журналов обычно:

  • Apache журнал доступа: / usr / local / apache / domlogs / /
  • Apache журнал ошибок: / usr / local / apache / logs / error_log
  • PHP журнал ошибок: / home / / public_html / error_log
1 голос
/ 10 апреля 2020

Простая замена файла может оказаться бесполезной. Попробуйте включить журнал ошибок или проверьте, можете ли вы найти этот файл bootstrap / app. php. Если да, значит, в composer нет проблем. Попробуйте проверить установленную версию PHP и совместима ли она с Laravel. Попробуйте проверить PHP Журнал ошибок. Это может быть полезно.

1 голос
/ 09 апреля 2020

Начало с composer dumpautoload. Затем запустите php artisan optimize:clear. Повторно загрузите весь сайт, и вы должны быть хороши до go. Я испытал очень похожую проблему. Вы запускаете конвейер на сервере или просто подключаете сайт по FTP? Вы можете запустить composer на сервере и то же самое для ремесленника? Если вы можете, вам нужны эти команды, так как ваш кеш часто основан на дисках вашего хост-компьютера и не будет работать в prod.

0 голосов
/ 11 апреля 2020

Вы проверили разрешения и владельца для хранилища и папки начальной загрузки / кэша?

эти разрешения должны быть установлены для работы приложения

sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache

0 голосов
/ 08 апреля 2020

Итак, вот что я бы сделал.

Если это возможно, просто включите отладку, это покажет вам ошибку в самом веб-браузере (вы можете сделать это из файла .env)

Вы также можете прочитать файл журнала laravel для ошибок, как упомянуто ранее.

Если вы не хотите этого делать, выполните следующие команды

PHP кэш ремесленника: очистить

PHP маршрут ремесленника: кэш

PHP конфигурация ремесленника: кэш

PHP сборник ремесленника

PHP ремесленник optimize

Если бы вы могли поделиться более подробной информацией, которая поможет ...

0 голосов
/ 08 апреля 2020

Хорошо, я должен упомянуть несколько вещей

1: Go в storage/logs директорию и удалить все *.log файлы, затем вы обновите sh веб-страницу, и вы увидите, чтобы увидеть для любого файла журнала, если файл журнала отсутствует, это означает, что он связан с конфигурацией сервера и т. д. c. если есть файл журнала, вы читаете его и публикуете здесь

2: Вы перетаскивали код на cpanel с помощью консольной команды, используя систему контроля версий, такую ​​как git или svn, или вы только что загрузили ее классическим способом c, если вы действительно вытянули его с помощью VCS, вы можете сделать composer update вместо composer install, который обновит все пакеты, насколько это возможно, как определено в файле composer.json, и вы, возможно, получили более высокую версию продавец, чем ваш местный, и что-то может сломаться там.

3: У вас может быть другая php версия на сервере, чем у вашего локального, что много раз приводило к реальным проблемам.

Я не могу точно сказать, пока вы не разместите здесь свой файл журнала

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...