我遇到的问题是,每次对代码进行任何更改时,都会删除所有用户上传的图像。我认为这是因为它使服务器上的公共上载与我本地上的内容相匹配。
因此我将/public/uploads/*
添加到了.gitignore
然后;
git rm -r --cached.
git add .
git commit
git push
没有解决。还尝试将其添加到.gitignore
*/uploads/*
,**/uploads/*
和/uploads/*
中。
在部署到Heroku时,如何防止提交内容抹去用户上传的内容?
答案 0 :(得分:0)
问题不在于Git¹,而在于Heroku。其filesystem is ephemeral:重新启动测功机后,对文件系统所做的任何更改都将丢失:
每个dyno都有自己的临时文件系统,其中包含最新部署的代码的新副本。在dyno的生命周期中,其运行的进程可以将文件系统用作临时暂存器,但是任何其他dyno的进程都看不到已写入的文件,并且在dyno停止或重新启动时,所有写入的文件都会被丢弃。例如,在由于应用程序部署而更换测功机的任何时候都会发生这种情况,并且在正常测功机管理的一部分中大约每天一次。
每天至少部署一次新版本以及in other situations时会发生这种情况。
official recommendation from Heroku用于将上传的文件存储在Amazon S3等第三方服务上。
¹尽管可能值得验证您的.gitignore
的配置正确,因为这也可能是一个问题。尝试运行git check-ignore -v public/uploads/some-file-that-exists
。您应该看到引用忽略规则的响应,该规则导致该文件被忽略。