Heroku (Cedar Stack) で Python/Django を使っていますが、S3 バケットからファイルを取り出して処理する管理コマンドを書く必要があります。一時ファイルシステムの使い方がよくわかりません。書き込み可能なディレクトリは限られているのでしょうか? 書き込み可能なフォルダは限られていることを示唆する別の記事を見つけました (ただし、Cedar スタックには当てはまらないようです)。この開発者を見つけました。記事しかし、あまり詳しく書かれていません(注:一時的なものであることは理解しています。ファイルを解凍して処理するだけでよいのです)。アプリケーションのルートの下にフォルダを作成すればいいのでしょうか?また、どうすればいいのでしょうか?おそらく$HOMEを使用できるようです。私は、経由で接続して少しテストしました。
$ heroku run bash
そして実行中:
$ echo #HOME
戻り値:
/アプリ
そして実行中:
$ mkdir $HOME/tmp
アプリのルートにフォルダーを作成し、他のファイルやフォルダーと同じユーザーとグループを付与します。
それで...ここで何か見落としているものはありますか? もっと良い方法はありますか? これには OS 環境変数がありますか? 「env」を実行しましたが、これより良いものは見つかりませんでした。
ベストアンサー1
エフェメラルファイルシステムを本当に理解するには、dynoとは何かを理解する必要があります。詳細については、ダイノの仕組み簡単に言えば、プロセスは Heroku 上で、独自のファイルシステムを持つ仮想マシン内で実行されます。その仮想マシンはさまざまな理由で停止し、それとともにファイルシステムも停止する可能性があります。
アプリが再起動、再構成 (例heroku config ...
)、スケーリングなどされると、基礎となるファイルシステムは破棄されます。たとえば、2 つの Web dyno があり、一部のファイルを一時ファイルシステムに書き込み、3 つの dyno にスケーリングすると、アプリは新しい dyno で実行されるため、それらのファイルは破棄されます。
一般的に、エフェメラル ファイルシステムは他のファイルシステムと同じように機能します。 や などの書き込み権限があるディレクトリに$HOME
ファイル/tmp
を書き込むことができます。永続性が必要なファイルは、S3 または同様の耐久性のあるストアに書き込む必要があります。Heroku は AWS 上で実行され、S3 にはパフォーマンス上の利点があるため、S3 が推奨されます。自由に再作成できるファイルは、dyno のエフェメラル ストアに保存できます。