Laravel/Heroku,没有这样的会话文件或目录

Vic*_*ico 3 php heroku laravel

我正在尝试在 heroku 上运行我的应用程序,但对于某些请求(只有 POST、GET 工作正常),我的 Ajax POST 请求出现以下错误:

Error: Request failed with status code 419
Run Code Online (Sandbox Code Playgroud)

当我检查 heroku 日志时,我收到此错误:

     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)
Run Code Online (Sandbox Code Playgroud)

我已经检查过,该目录/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
Run Code Online (Sandbox Code Playgroud)

Atouch /app/storage/framework/sessions/r9yIHf3WlKIzROWGPlVOk59rwr6tVyAeCLuJ9wWx也不起作用。

我试图删除存储文件夹并重新创建它。

您知道可能会出现什么问题吗?

cee*_*yoz 6

Heroku 的文件系统是临时的,并且会在您的 dyno 重新启动时消失 - 即至少每天一次(由于 Heroku 会自动重新启动)以及每次部署或配置更改后。

此外,heroku run bash将您连接到一个全新的独立服务器,因此如果您在其中创建/修改文件/文件夹/权限,一旦您关闭会话,它就会立即消失。对实际的网络服务器实例没有影响。

这意味着您不应该依赖文件系统来处理任何打算永久保存的事情——例如,没有文件上传(它们应该放在像 AWS S3 这样的地方)。另外,如果您使用多个 dyno,将会话数据存储为文件将意味着该会话仅存在于其中一个 dyno 上 - 在下一次浏览时,很有可能它会消失,因为用户已经点击了不同的动态。

解决方案?使用不同的驱动程序存储会话。我更喜欢 Redis 驱动程序,但如果您想稍微降低复杂性,可以使用数据库驱动程序。