我相当基本的应用程序允许用户上传头像。
使用
将应用程序部署到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
但问题仍然存在。你能指出我正确的方向吗?
答案 0 :(得分:27)
之所以这样,是因为Heroku限制了您在服务器上存储数据的方式。回到bamboo
堆栈日,storing any data was simply impossible而不使用外部服务。由于他们引入了Cedar
堆栈things have changed a little bit,但仍然无法存储持久数据。
正如您所发现的,每次将新更改推送到Heroku应用程序时(或每次应用程序关闭并在非活动状态x分钟后重新启动),都会重新创建应用程序并丢失所有存储的数据。 / p>
您最好的选择是根本不使用/ public目录,并开始使用Amazon S3,Rackspace Cloud Files或Spideroack等外部服务
答案 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访问并且它起作用了