59

Heroku(Cedar Stack)でPython / Djangoを使用していますが、S3バケットからファイルを取り出して処理する管理コマンドを作成する必要があります。エフェメラルファイルシステムの使用方法がわかりません。書き込み可能な特定のディレクトリのみがありますか?書き込み可能な特定のフォルダーのみが存在することを示唆する別の記事を見つけました(ただし、Cedarスタックには適用されないようです)。この開発記事を見つけましたが、詳細には触れていません(注:これは一時的なものであることを理解しています。ファイルを解凍して処理するだけで済みます)。アプリケーションのルートの下のどこかにフォルダを作成できますか?そして、どうすればそれを手に入れることができますか?おそらく$HOMEを使用できるようです。経由で接続して少しテストしました

$ heroku run bash

と実行中:

$ echo #HOME

戻り値:

/アプリ

と実行中:

$ mkdir $HOME/tmp

アプリのルートにフォルダーを作成し、他のファイルやフォルダーと同じユーザーとグループを提供します。

だから...私がここで欠けているものは何ですか?それを行うためのより良い方法は?このためのOS環境変数はありますか?「env」を実行しましたが、これ以上良いものはありません。

4

2 に答える 2

78

エフェメラルファイルシステムを実際に理解するには、dynoとは何かを理解する必要があります。dynosがどのように機能するかについてもっと読むことができます。ただし、一言で言えば、プロセスは、独自のファイルシステムを備えた仮想マシンのHerokuで実行されます。その仮想マシンは、ファイルシステムを一緒に使用して、さまざまな理由で停止する可能性があります。

基盤となるファイルシステムは、アプリの再起動、再構成(例heroku config ...)、スケーリングなどの際に破棄されます。たとえば、2つのWeb dynoがあり、いくつかのファイルをエフェメラルファイルシステムに書き込み、3つのdynoにスケーリングすると、それらのファイルは破棄されます。アプリが新しいdynoで実行されているためです。

一般に、エフェメラルファイルシステムは他のファイルシステムと同じように機能します。$HOMEおよびなどの書き込み権限を持つディレクトリには、/tmpファイルを書き込むことができます。永続性が必要なファイルはすべて、S3または同様の耐久性のあるストアに書き込む必要があります。HerokuはAWSで実行され、S3にはいくつかのパフォーマンス上の利点があるため、S3が推奨されます。自由に再作成できるファイルはすべて、dynoのエフェメラルストアに保存できます。

于 2012-09-14T06:06:17.337 に答える
57

'/ tmp'ディレクトリの下にファイルを作成でき、そのファイルはリクエストの完了後に破棄されます。私はCedarでこれを行っていますが、問題はありません。

于 2012-09-14T01:16:23.567 に答える