1

Heroku にデプロイされた Facebook 用のアプリケーションがあります。このアプリケーションは、誰かがフォームに入力すると、一部のユーザー データを CSV に収集します。ただし、この CSV には問題があります。毎日完全に消去されます (ヘッダーのみが残ります)。

CSV を操作している PHP コードを提供します。

これは、実際に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 でホストされており、月曜日以降、Heroku にデータをプッシュしていません。私の最後のログは、最後のプッシュが月曜日の 13:21 であったことを示しています。しかし、今日からしかCSVでデータを見ることができません。他の日もチェックインしましたが、他の入力がありました。

なぜこれが起こっているのですか?Heroku または PHP コードに問題はありますか?

前もって感謝します !!

4

2 に答える 2

2

Herokuは、ネットワーク内の潜在的に数十または数百のサーバー間でコードを同期することで拡張します。リクエストを処理する仮想マシンは毎回異なる可能性があるため、個々のインスタンスに保存されている一時データを後で利用できるようにすることはできません。ここでそれがどのように機能するかについてもう少し読むことができます。

理想的には、このタスクのために長期保管用に構築された保管メカニズムを使用する必要があります。私はMongoHQを少し使用しましたが、かなりうまく機能します(無料枠があります)。AmazonSimpleDBなどのKey/Valueストアも適している可能性があります。

于 2013-03-22T21:12:37.453 に答える
2

ファイル システムに書き込むことはできますが、dyno のスケーリング、dyno の再起動、コードの再デプロイで失われます。Dyno は Heroku によって毎日循環されるため、これが損失の原因になります。

于 2013-03-22T21:07:46.327 に答える