Laravel / Heroku, нет такого файла или каталога для сессий - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь запустить свое приложение на heroku, но для некоторых запросов (только POST, GET работают нормально) у меня есть следующая ошибка в моем запросе Ajax POST:

Error: Request failed with status code 419

Когда я проверяю логи герои, я получаю эту ошибку:

     production.ERROR: file_put_contents(/app/storage/framework/sessions/r9yIHf3WlKIzROWGPlVOk59rwr6tVyAeCLuJ9wWx): 
failed to open stream: No such file or directory
{"userId":1,"email":"xxx@gmail.com","exception":"[object] (ErrorException(code: 0): 
file_put_contents(/app/storage/framework/sessions/r9yIHf3WlKIzROWGPlVOk59rwr6tVyAeCLuJ9wWx): failed to open stream: No such file or directory at /app/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:122)

Я проверил, каталог /storage/framework/sessions существует.

Я пытался запустить chmod 777 -R / (но все еще эта проблема)

Я пробовал следующие команды:

php artisan optimize
php artisan config:clear
php artisan cache:clear
php artisan config:cache
php artisan optimize:clear

A touch /app/storage/framework/sessions/r9yIHf3WlKIzROWGPlVOk59rwr6tVyAeCLuJ9wWx тоже не работает.

Я попытался удалить папку хранилища и создать ее заново.

У вас есть представление о том, что может пойти не так?

1 Ответ

0 голосов
/ 10 января 2019

Файловая система Heroku является временной и исчезает при каждом перезапуске ваших динамов - то есть, по крайней мере, один раз в день (из-за автоматического перезапуска Heroku) и после каждого изменения развертывания или конфигурации.

Кроме того, heroku run bash подключает вас к новому, отдельному серверу , поэтому, если вы создаете / изменяете файлы / папки / разрешения для этого, он буквально все исчезнет, ​​как только как вы закрываете сеанс. Не влияет на фактические экземпляры веб-сервера.

Это означает, что вы не должны полагаться на файловую систему для чего-либо, предназначенного для постоянной работы - например, никаких загрузок файлов (они должны идти где-то, например, в AWS S3). Кроме того, если вы используете более одного dyno, сохранение данных сеанса в виде файлов будет означать, что сеанс существует только на одном из dynos - при следующем просмотре страницы есть большая вероятность, что он исчезнет, ​​поскольку пользователь нажал разные динам.

Решение? Храните сессии, используя другой драйвер. Я предпочитаю драйвер Redis, но вы можете использовать драйвер базы данных, если хотите немного снизить сложность.

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