13

私のかなり基本的なアプリケーションでは、ユーザーがアバターをアップロードできます。

アプリケーションはHerokuにデプロイされます

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

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

# Ignore User generated files
/public/system/*

リポジトリからファイルを削除しました。

$ git rm -rf --cached public/system

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

4

4 に答える 4

28

これは、Herokuがサーバーにデータを保存する方法を制限しているためです。スタックのbamboo時代には、外部サービスを使用せずにデータを保存することは不可能でした。Cedar彼らがスタックを導入して以来、状況は少し変わりましたが、永続データを保存することはまだ不可能です。

ご存知のとおり、Herokuアプリケーションに新しい変更をプッシュするたびに(または、アプリケーションがx分間非アクティブになった後にシャットダウンして再起動するたびに)、アプリケーションが再作成され、保存されているすべてのデータが失われます。

最善の策は、/ publicディレクトリをまったく使用せず、Amazon S3Rackspace Cloud FilesSpideroakなどの外部サービスの使用を開始することです。

于 2012-06-28T14:29:28.847 に答える
2

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

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

Heroku Web サイトで次の記事を読むことをお勧めします: Uploading Files to Ruby in S3 with Paperclip

于 2014-09-06T08:04:15.760 に答える