PutFileAs в хранилище Laravel возвращает false в продакшене (сервер CentOS), но может загружаться локально (сервер Laragon)

Вопрос или проблема

В настоящее время я использую этот пакет от masbug для загрузки файлов в Google Drive, который прекрасно работает на моем локальном сервере, который настроен на Windows (laragon). Но неожиданно функция “putFileAs” перестала работать, я уже обновил права доступа к папкам, но все равно не могу понять, в чем дело.

Немного информации о моем рабочем сервере:

  • EC2-инстанс AWS
  • Серверная ОС (Centos 7)
  • Nginx
  • Php 8.1
  • Laravel 10.10
  • Версия пакета masbug – “^2.2”

Изображение ниже – загрузка с рабочего сервера
введите описание изображения здесь

Изображение ниже – загрузка с локального сервера
введите описание изображения здесь

Как видно, локальный сервер возвращает строку. Это странное поведение произошло недавно, и я не знаю, почему.

Спасибо

Ответ или решение

Вероятная причина, по которой метод putFileAs в Laravel Storage возвращает false на вашем production сервере, может быть связана с несколькими аспектами, включая разрешения, настройки окружения и конфигурацию пакета. Давайте подробно рассмотрим возможные решения этой проблемы.

1. Проверьте разрешения на директорию

На вашем сервере CentOS убедитесь, что директория, в которую вы пытаетесь загрузить файл, имеет правильные разрешения. Выполните следующие команды, чтобы установить необходимые разрешения:

sudo chown -R nginx:nginx /path/to/your/storage
sudo chmod -R 775 /path/to/your/storage

Замените /path/to/your/storage на путь к вашей директории хранения. Убедитесь, что пользователь nginx (или другой пользователь, под которым работает ваш веб-сервер) имеет доступ к этой директории.

2. Проверьте настройки окружения

Убедитесь, что ваша конфигурация .env файла правильно настроена для работы с Google Drive. Проверьте такие параметры, как GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_REFRESH_TOKEN, и убедитесь, что они соответствуют тем, которые вы использовали на локальном сервере.

3. Логи ошибок

Просмотрите логи ошибок вашего приложения и веб-сервера. Логи Laravel обычно находятся в storage/logs/laravel.log, а логи Nginx могут быть в /var/log/nginx/error.log. Ошибки в этих логах могут дать дополнительную информацию о том, почему putFileAs не выполняется.

4. Проверка наличия необходимого пакета

Проверьте, установлен ли указанный вами пакет (masbug/flysystem-google-drive-ext) и его зависимости. Вы можете выполнить команду:

composer show masbug/flysystem-google-drive-ext

Убедитесь, что пакет обновлен до последней стабильной версии.

5. Отладка кода

Добавьте отладочную информацию перед вызовом putFileAs и после него, чтобы понять, что именно возвращает метод. Например:

try {
    $result = Storage::disk('google')->putFileAs('folder/', $file, $filename);
    if ($result === false) {
        Log::error('Failed to upload file to Google Drive', ['file' => $filename]);
    }
} catch (Exception $e) {
    Log::error('Exception while uploading', ['error' => $e->getMessage()]);
}

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

6. Временные файлы и коды ответа

Если у вас есть возможность, проверьте коды ответа, возвращаемые от Google Drive API. Они могут дать понимание о том, какие именно запросы не проходят. Возможно, проблема связана с исчерпанием лимитов API или неправильными метаданными.

7. Сравнение окружений

Поскольку у вас все работает на локальном сервере, сравните конфигурации, версии PHP и расширения, установленные на локальной и production средах. Убедитесь, что версии библиотек и модулей одинаковы.

Если вы выполните все эти шаги и проблема сохранится, сообщите о результатах и об ошибках, которые вы нашли в логах, чтобы можно было более детально диагностировать проблему. Надеюсь, это поможет вам решить вашу проблему с загрузкой файлов в Google Drive!

Оцените материал
Добавить комментарий

Капча загружается...