По какой причине не загружаются файлы на сервер в очереди?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
НиколайК
Сообщения: 6
Зарегистрирован: 2019.03.28, 11:12

По какой причине не загружаются файлы на сервер в очереди?

Сообщение НиколайК »

Добрый день. Впервые юзаю очереди в Yii, и сразу наткнулся на проблему. Решил сделать простейшего воркера для загрузки файлов на сервер. Файл прилетает из формы. Если обработать файл без очереди, то он без проблем сохраняется в нужное место, но с очередью проблема.

Код: Выделить всё

	$this->video = hash('MD5', $this->video_file->baseName . floor($this->task_id / 100)) . '.' . $this->video_file->extension;
        $filepath = $this->getRelativeVideoPath() . $this->video;
        $this->video_file->saveAs($this->getRelativeVideoPath() . $this->video);// так работает
        Yii::$app->queue->push(new TaskVideoJob([
            'file' => $this->video_file,
            'path' => $filepath,
        ])); //так не работает
        
В воркере

Код: Выделить всё

class TaskVideoJob extends BaseObject implements JobInterface
{
    public $file;
    public $path;

    public function execute($queue) {
        $this->file->saveAs($this->path);
    }
}
Также в воркере не работает move_uploaded_file. Проверял в очереди является ли $file инстансом UploadedFile - является. В логах никаких ошибок, в queue/info задачи помечаются как выполненные. В чем может проблема?
H_R
Сообщения: 2
Зарегистрирован: 2021.01.11, 01:09

Re: По какой причине не загружаются файлы на сервер в очереди?

Сообщение H_R »

Проверьте, что приходит в виде $this->getRelativeVideoPath()
и какие парамерты приходят в функцию move_uploaded_file.
Так же возможно проблема с временной папкой.
Последний раз редактировалось H_R 2021.01.12, 15:49, всего редактировалось 3 раза.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: По какой причине не загружаются файлы на сервер в очереди?

Сообщение ElisDN »

НиколайК писал(а): 2021.01.12, 10:48 В чем может проблема?
В том, что загруженный сервером во временную папку файл удаляется сервером после завершения работы PHP-файла.

Поэтому в контроллере он есть, а в воркере его уже нет.
НиколайК
Сообщения: 6
Зарегистрирован: 2019.03.28, 11:12

Re: По какой причине не загружаются файлы на сервер в очереди?

Сообщение НиколайК »

ElisDN писал(а): 2021.01.12, 13:58
НиколайК писал(а): 2021.01.12, 10:48 В чем может проблема?
В том, что загруженный сервером во временную папку файл удаляется сервером после завершения работы PHP-файла.

Поэтому в контроллере он есть, а в воркере его уже нет.
Тоже дошел до этой мысли. Как в таком случае правильно поступить? Временное сохранение файла как я понимаю фактически смысла не имеет, это по сути то же сохранение на сервер. Как в таких случаях работают с файлами?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: По какой причине не загружаются файлы на сервер в очереди?

Сообщение ElisDN »

Сохраняют сразу в контроллере.
НиколайК
Сообщения: 6
Зарегистрирован: 2019.03.28, 11:12

Re: По какой причине не загружаются файлы на сервер в очереди?

Сообщение НиколайК »

ElisDN писал(а): 2021.01.12, 14:14 Сохраняют сразу в контроллере.
но это получается синхронное выполение. В асинхронном формате с очередью загрузку файлов на сервер не выполнить?
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: По какой причине не загружаются файлы на сервер в очереди?

Сообщение rak »

НиколайК писал(а): 2021.01.12, 14:15
ElisDN писал(а): 2021.01.12, 14:14 Сохраняют сразу в контроллере.
но это получается синхронное выполение. В асинхронном формате с очередью загрузку файлов на сервер не выполнить?
загрузку - нет, обработку уже загруженных файлов - да
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: По какой причине не загружаются файлы на сервер в очереди?

Сообщение ElisDN »

НиколайК писал(а): 2021.01.12, 14:15 но это получается синхронное выполение.
А какие у этого проблемы? При saveAs() всего лишь загруженный во временную папку сервера одноразовый файл /tmp/sd4v8a переименовывается в ваш постоянный файл web/uploads/123.mp4. Это производится мгновенно.

Так что в контроллере по saveAs() либо сразу поместите файл в нужное место, либо поместите пока в свою временную папку.

И потом уже его имя 123.mp4 передавайте в очередь в команды переконвертации видео и генерации превьюшек.
НиколайК
Сообщения: 6
Зарегистрирован: 2019.03.28, 11:12

Re: По какой причине не загружаются файлы на сервер в очереди?

Сообщение НиколайК »

ElisDN писал(а): 2021.01.12, 14:26
НиколайК писал(а): 2021.01.12, 14:15 но это получается синхронное выполение.
А какие у этого проблемы? При saveAs() всего лишь загруженный во временную папку сервера одноразовый файл /tmp/sd4v8a переименовывается в ваш постоянный файл web/uploads/123.mp4. Это производится мгновенно.

Так что в контроллере по saveAs() либо сразу поместите файл в нужное место, либо поместите пока в свою временную папку.

И потом уже его имя 123.mp4 передавайте в очередь в команды переконвертации видео и генерации превьюшек.
Ну мне собственно хотелось поработать с очередями в админке, где к посту могут загружаться видео (пара гигабайт) и чтобы эти видео при обновлении поста загружались асинхронно, а юзеру сразу отдавалась обратно форма редактирования.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: По какой причине не загружаются файлы на сервер в очереди?

Сообщение rak »

НиколайК писал(а): 2021.01.12, 14:35
ElisDN писал(а): 2021.01.12, 14:26
НиколайК писал(а): 2021.01.12, 14:15 но это получается синхронное выполение.
А какие у этого проблемы? При saveAs() всего лишь загруженный во временную папку сервера одноразовый файл /tmp/sd4v8a переименовывается в ваш постоянный файл web/uploads/123.mp4. Это производится мгновенно.

Так что в контроллере по saveAs() либо сразу поместите файл в нужное место, либо поместите пока в свою временную папку.

И потом уже его имя 123.mp4 передавайте в очередь в команды переконвертации видео и генерации превьюшек.
Ну мне собственно хотелось поработать с очередями в админке, где к посту могут загружаться видео (пара гигабайт) и чтобы эти видео при обновлении поста загружались асинхронно, а юзеру сразу отдавалась обратно форма редактирования.
загружать асинхронно можно, но в любом случае пока загрузка не завершится - со страницы уходить нельзя(иначе как файл с клиента должен попасть на сервер?)
для загрузки можно использовать к примеру вот такой плагин(есть виджеты для yii) https://github.com/blueimp/jQuery-File-Upload
Ответить