2012-06-28 12 views
11

私のかなり基本的なアプリケーションではユーザーがアバターをアップロードできます。git pushの後にheroku - Herokuのアップロードファイルが失われました

アプリケーションが

$ git add . 
$ git commit -m "description" 
$ git checkout master 
$ git merge my-cool-new-feature 
$ git push heroku 

問題がある、私はHerokuのに変更をプッシュするたびにHerokuのにデプロイされ、Herokuのにアップロードしたすべてのファイルが失われます。私はこの問題は、フォルダ/ファイルはバージョン管理下にあったということでした、と思ったので、私は

# Ignore User generated files 
/public/system/* 

を.gitignoreするフォルダを追加し、リポジトリからファイルを削除しました。

$ git rm -rf --cached public/system 

しかし、問題は解決しません。あなたは正しい方向に私を向けることができますか?

答えて

26

理由は、Herokuがサーバーにデータを格納する方法を制限するためです。スタック時のbambooに戻ると、外部サービスを使用しないでstoring any data was simply impossibleになります。彼らはCedarスタックを導入して以来、things have changed a little bitが、永続的なデータを保存することはまだできません。

あなたが発見したように、新しい変更をHerokuアプリケーションにプッシュするたびに(またはx分間アクティブでない状態でアプリケーションがシャットダウンして再起動するたびに)、アプリケーションが再作成され、保存されたすべてのデータが失われます。

あなたの最善の策は、すべての/ publicディレクトリを使用し、Amazon S3Rackspace Cloud FilesまたはSpideroack

+1

感謝を。データベースの内容は変わっていないので、私は既にリセットを却下しています。そして、私はHerokus "Getting Started" - 文書でそれについて何も見つけることができませんでした。開発者はその情報をFAQとしたいと思うかもしれません。再度、感謝します! –

+3

さて、データベースとファイルへのアクセスには2つの違いがあります。 Herokuは何らかの永続的なストレージをサポートしなければならないし、開発者が機能的なアプリケーションをすばやく起動するのは全く役に立たないので、共有されたpostgreSQLインスタンスにアクセスできますが、ファイルストレージへのアクセスは含まれません。 – JeanMertz

1

あなたのファイルは、すべての展開で失われるように外部サービスを使用して起動しないことです。私の好みのソリューションは、PaperclipとAmazonのバケツを使用しています。 Paperclipはあなたの画像をバケツに保存するので、アプリから自由に参照することができます。

1

アプリケーションがユーザーによってアップロードされたファイルを受け取る必要がある場合は、これらのアップロードが中央の耐久性のある場所に保存されていることを確認する必要があります。

Herokuの一時ファイルシステムでは、dynoファイルシステムに書き込まれた情報は、dynoを再起動すると失われます。代わりに、Herokuはバッキングサービスを推奨します。ファイルとメディアのストレージについては、Amazon’s Simple Storage Service (S3)が最適です。

あなたはHerokuのウェブサイト上でこのarcticleを参照することもできます。答えをUploading Files to S3 in Ruby with Paperclip

+0

HerokuでAWS S3を使用する方法についての詳細は:[AWS S3を使用した静的資産とファイルのアップロード](https://devcenter.heroku.com/articles/s3) –

関連する問題