首页 > 解决方案 > 提交时忽略公共上传

问题描述

我遇到一个问题,每次我对代码进行任何更改时,我的所有用户上传的图像都会被擦除。我认为这是因为它将服务器上的公共上传与我在本地的上传相匹配。

所以我添加/public/uploads/*.gitignore Then;

git rm -r --cached.
git add .
git commit
git push

没修。还尝试添加到.gitignore */uploads/*,**/uploads/*/uploads/*.

当我部署到 Heroku 时,如何防止我的提交擦除用户上传的内容?

标签: ruby-on-railsgitheroku

解决方案


问题不在于 Git¹,而在于 Heroku。它的文件系统是短暂的:每当您的测功机重新启动时,对文件系统所做的任何更改都会丢失:

每个 dyno 都有自己的临时文件系统,以及最近部署的代码的新副本。在 dyno 的生命周期中,它的运行进程可以将文件系统用作临时暂存器,但是任何其他 dyno 中的进程都看不到写入的文件,并且在停止或重新启动 dyno 时,写入的任何文件都将被丢弃。例如,任何时候由于应用程序部署而更换测功机时都会发生这种情况,并且作为正常测功机管理的一部分,大约每天一次。

当您部署新版本时会发生这种情况,并且在其他情况下也会发生这种情况,至少每天一次。

Heroku的官方建议是将上传的文件存储在 Amazon S3 等第三方服务上。


¹尽管可能值得验证您.gitignore的配置是否正确,因为这也可能是一个问题。尝试运行git check-ignore -v public/uploads/some-file-that-exists。您应该看到一个响应引用了导致该文件被忽略的忽略规则。


推荐阅读