代码之家  ›  专栏  ›  技术社区  ›  Vico

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

  •  0
  • Vico  · 技术社区  · 7 年前

    我正在尝试在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 回复  |  直到 7 年前
        1
  •  1
  •   ceejayoz    7 年前

    Heroku的文件系统是临时的,并且在任何时候您的Dyno重新启动时都会消失——即每天至少一次(由于Heroku自动重新启动),并且在每次部署或配置更改之后。

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

    这意味着您不应该依赖文件系统来实现任何永久性的内容——例如,不进行文件上载(它们应该像AWS S3那样出现在某个地方)。另外,如果您使用的是多个Dyno,将会话数据存储为文件意味着会话只存在于其中一个Dyno上-在下一个页面视图中,很可能会消失,因为用户点击了 不同的 戴诺。

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