Laravel / Heroku,没有用于会话的此类文件或目录

时间:2019-01-10 15:33:13

标签: php laravel heroku

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

Error: Request failed with status code 419

当我检查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)

我已经检查过,目录/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

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

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

您是否知道可能出什么问题?

1 个答案:

答案 0 :(得分:1)

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

此外,heroku run bash将您连接到全新的独立服务器,因此,如果您要在其中创建/修改文件/文件夹/权限,那么实际上一切都会进行您在会话结束后立即离开。对实际的Web服务器实例没有任何影响。

这意味着您不应该依赖文件系统来实现任何永久性的工作-例如,不上传文件(它们应位于AWS S3之类的地方)。另外,如果您使用多个dyno,则将会话数据存储为文件将意味着该会话仅存在于一个dyno上-在下一次综合浏览量下,很有可能它会消失,因为用户点击了不同 dyno。

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