在git push heroku之后 - Heroku上传的文件丢失了

时间:2012-06-28 14:21:06

标签: git heroku

我相当基本的应用程序允许用户上传头像。

使用

将应用程序部署到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 个答案:

答案 0 :(得分:27)

之所以这样,是因为Heroku限制了您在服务器上存储数据的方式。回到bamboo堆栈日,storing any data was simply impossible而不使用外部服务。由于他们引入了Cedar堆栈things have changed a little bit,但仍然无法存储持久数据。

正如您所发现的,每次将新更改推送到Heroku应用程序时(或每次应用程序关闭并在非活动状态x分钟后重新启动),都会重新创建应用程序并丢失所有存储的数据。 / p>

您最好的选择是根本不使用/ public目录,并开始使用Amazon S3Rackspace Cloud FilesSpideroack等外部服务

答案 1 :(得分:1)

每次部署都会丢失您的文件。我首选的解决方案是使用Paperclip和亚马逊桶。 Paperclip会将您的图像存储在存储桶中,以便可以从应用程序中随意引用。

答案 2 :(得分:1)

如果您的应用程序需要接收用户上传的文件,您需要确保这些上传文件存储在一个中央且持久的位置。

使用Heroku的短暂文件系统,当重新启动dyno时,写入dyno文件系统的任何信息都将丢失。相反,Heroku建议支持服务。对于文件和媒体存储,Amazon’s Simple Storage Service (S3)是一个很好的解决方案。

您可能想在Heroku网站上阅读此论文:Uploading Files to S3 in Ruby with Paperclip

答案 3 :(得分:0)

只需将您的 mongodb 网络访问权限更改为“任何人访问” 问题解决了。

我做了以上所有步骤,但不起作用,最后我更改了monodb访问并且它起作用了

相关问题