2012-09-14 76 views
45

私はPython/DjangoをHeroku(Cedar Stack)で使用しています。私はS3バケットからファイルを取り出して処理する管理コマンドを持っています。私は一時ファイルシステムの使い方を理解していません。書き込み可能な特定のディレクトリだけがありますか?私は書き込み可能な特定のフォルダしかないことを暗示する他の記事を見つけました(ただし、Cedarスタックには当てはまらないようです)。私はこのdev articleを見つけましたが、それは詳細には行きません(注:私はそれが単なる一時的なものであることを理解しています。ファイルを解凍してファイルを処理する必要があります)。アプリケーションのルートの下の任意の場所にフォルダを作成できますか?そして、どうすればそれを得ることができますか?たぶん私は$ HOMEを使うことができるようです。herokuの一時ファイルシステムの使用方法

$ echo #HOME 

戻り:

/アプリ

ランニング:

$ mkdir $HOME/tmp 

が作成Iビア

$ heroku run bash 

と走行に接続することによって、テストのビットをしました番目のフォルダ他のファイルやフォルダと同じユーザとグループを持っています。

だから私はここで行方不明ですか?それを行う良い方法は?このためのOS環境変数はありますか?私は "env"を実行しましたが、私はより良いものを見ません。

+3

'heroku run'を実行するたびに、これは、*になるHerokuの新しい[one-off dyno](https://devcenter.heroku.com/articles/one-off-dynos)をスピンアップします有料*。その後、 'heroku ps'を使ってダイノスの状態を確認して、まだ動いているかどうかを調べることができます。 'heroku run bash'を使用する場合、dynoは端末に接続されています。つまり、端末セッションを終了すると停止します(Ctrl + Cなど)。さらに、一回限りのdynoは実行時に書かれた他のdynosからのファイルにアクセスすることができないので、 'ls'などはあなたの他のdynosにあるものを見ることはできません。 – caw

+5

@MarcoW。私はあなたのコメントのimporatnceを強調したいと思います!これは、 'heroku run'が新しいdynoをスピンアップするほど、自明ではありません。 'heroku run" echo test> /app/web/test.html "によって生成されたファイルをHTTP経由でアクセスできない理由を理解してくれました。それは一回限りのdynoで作成されたもので、決してwebに直面していないことが判明しました。 –

答えて

47

'/ tmp'ディレクトリの下にファイルを作成することができます。要求が完了すると、そのファイルは破棄されます。私はシーダーでこれをやっていて、何の問題もありませんでした。

+4

実際、どこでもcedarスタックに書き込み可能です -/tmpはBambooの日から戻ってきました。 dynoが再起動されたときなどにアップロードされたものはすべて失われます。 –

+1

他の人にとって参考になる場合は、ルートディレクトリに "tmp"というディレクトリを作成しなければなりませんでした。私が最初にこの回答に出くわしたとき、それはHerokuの一部として既にtmpが存在するかのように聞こえました。私の場合はディレクトリを作成しました。 – Dan

67

一時的なファイルシステムを実際に理解するには、dynoの内容を理解する必要があります。 how dynos workについて詳しく読むことができます。一言で言えば、プロセスは独自のファイルシステムを持つ仮想マシンでHeroku上で動作します。その仮想マシンは、ファイルシステムをそれに合わせていくつかの理由で停止することができます。

アプリが再起動、再設定(例:heroku config ...)、スケーリングされたときに、基礎となるファイルシステムが破棄されます。例えば、2つのWebダイノスがある場合、ファイルを一時ファイルシステムに書き込み、3つのdynos、あなたのアプリが新しいダイノスで実行されているため、それらのファイルは破壊されます。

通常、一時ファイルシステムはどのファイルシステムと同じように動作します。 $HOME/tmpのような書き込み権限のあるディレクトリにファイルを書き込むことができます。永続性を必要とするファイルは、S3または同様の耐久性のあるストアに書き込む必要があります。 HerokuはAWS上で動作し、S3はパフォーマンス上の利点を提供するため、S3が優先されます。任意で再作成可能なファイルは、dynoのエフェメラルストアに保存できます。

+1

「S3はHerokuがAWSで動作し、S3がパフォーマンス上のメリットをもたらすため、好ましい」 - よく知っておいてください! ! :D @Naaman – Despertaweb

関連する問題