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 建议支持服务。对于文件和媒体存储,亚马逊的简单存储服务 (S3)是一个很好的解决方案。

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

于 2014-09-06T08:04:15.760 回答
1

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

于 2013-11-04T15:27:29.597 回答
0

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

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

于 2021-04-17T20:38:55.313 回答