Heroku CSV在1天后被擦除,所有数据丢失


Heroku CSV gets wiped after 1 day, all the data is lost.

我有一个Facebook应用程序,部署在Heroku上。当有人完成表单时,此应用程序将一些用户数据收集到CSV中。然而,我有这个CSV的问题。它每天被完全擦除(只保留头)。

我将提供PHP代码上我操纵的CSV:

下面是我实际操作CSV的代码,向它写入数据:

<?php
date_default_timezone_set('Europe/Bucharest');
$error = 0;
if($_GET["name"] == ""){
    $error = 2;
}
else if($_GET["email"] == ""){
    $error = 3;
}
else if(!filter_var($_GET["email"], FILTER_VALIDATE_EMAIL)){
    $error = 4;
}
if($error == 0){
$list = array($_GET["name"], $_GET["email"],date("d-m-Y H:i:s",time()));
$fp = fopen('users.csv', 'a');
fputcsv($fp, $list);
fclose($fp);
}
header( 'Location: index.php?signedrequest='.$_GET["signedrequest"].'&errors='.$error );
?> 

下面是用于下载CSV的管理页面的代码:

<div id="admintab">
<p>
<iframe name="myframe_targ" style="display:none;"></iframe>
Download : <a href="users.csv" target="myframe_targ">users.csv</a>
</p>
</div>

我提到这个应用程序托管在Heroku上,从周一开始我就没有向它推送任何数据。我最后的日志显示最后一次推送是在周一的13:21。然而,我只能从今天开始看到CSV格式的数据。我也检查了其他日子,还有其他输入。

你知道为什么会这样吗?是否有问题与Heroku或与我的PHP代码?

提前感谢!!

Heroku通过在其网络内的数十或数百台服务器上同步您的代码来扩展。您不能指望存储在单个实例上的临时数据以后可用,因为处理请求的虚拟机每次都可能不同。你可以在这里阅读更多关于它是如何工作的。

理想情况下,您应该为该任务使用为长期存储构建的存储机制。我用过一点MongoHQ,它工作得很好(他们有一个免费的层)。键/值存储(如Amazon SimpleDB)也可能是一个很好的选择。

虽然您可以写入文件系统,但在扩展dynos、重新启动dynos、重新部署代码时,它将丢失。Dynos是由Heroku每天循环的,所以这将是你损失的原因。