9

動的に生成された大規模なアセットとHerokuのホスティングについて質問があります。

私のアプリは、24 時間ごとに 1 回生成される大きなファイル (>100 MB) で構成される、基になるデータのサブセットの一括ダウンロードを提供します。サーバー上で実行している場合は、ファイルをパブリック ディレクトリに書き込むだけです。

しかし、私が理解しているように、これは Heroku では不可能です。/tmp ディレクトリに書き込むことはできますが、そこにあるファイルの保証された有効期間は、バックグラウンド ジョブではなく、1 つの要求と応答のサイクルに関して定義されているようです。

S3 を使用してダウンロード ファイルをホストしたいと考えています。S3 gemはストリーミング アップロードをサポートしていますが、ローカル ファイルシステムに既に存在するファイルに対してのみです。コンテンツのサイズを事前に知る必要があるようですが、私の場合は不可能です。

つまり、これはキャッチ 22 のように見えます。S3 にアップロードするときにメモリ内に巨大な文字列が作成されるのを避けようとしていますが、S3 はローカル ファイルシステムに既に存在するファイルのストリーミング アップロードのみをサポートしています。

ローカル ファイルシステムに書き込めない Rails アプリがある場合、メモリ内に大きな文字列を作成せずに、毎日生成される大きなファイルを提供するにはどうすればよいですか?

4

2 に答える 2

10

${RAILS_ROOT}/tmp(/ tmpではなく、アプリのディレクトリにあります)プロセスの期間中続きます。バックグラウンドDJを実行している場合、TMP内のファイルはそのプロセスの間持続します。

実際には、ファイルは長持ちします。可用性を保証できないと言う理由は、tmpがサーバー間で共有されておらず、各ジョブ/プロセスがクラウドの負荷に基づいて異なるサーバーで実行できるためです。また、仕事の一環としてファイルを使い終わったら、必ずファイルを削除する必要があります。

-別のHeroku従業員

于 2009-10-26T19:09:16.147 に答える
3

リッチ、

ファイルを ./tmp に書き込んでから、ファイルを S3 にストリーミングしようとしましたか?

-Blake Mizerany (Heroku)

于 2009-10-26T18:29:36.833 に答える