ruby-on-rails - 提交时忽略公共上传
问题描述
我遇到一个问题,每次我对代码进行任何更改时,我的所有用户上传的图像都会被擦除。我认为这是因为它将服务器上的公共上传与我在本地的上传相匹配。
所以我添加/public/uploads/*
到.gitignore
Then;
git rm -r --cached.
git add .
git commit
git push
没修。还尝试添加到.gitignore
*/uploads/*
,**/uploads/*
和/uploads/*
.
当我部署到 Heroku 时,如何防止我的提交擦除用户上传的内容?
解决方案
问题不在于 Git¹,而在于 Heroku。它的文件系统是短暂的:每当您的测功机重新启动时,对文件系统所做的任何更改都会丢失:
每个 dyno 都有自己的临时文件系统,以及最近部署的代码的新副本。在 dyno 的生命周期中,它的运行进程可以将文件系统用作临时暂存器,但是任何其他 dyno 中的进程都看不到写入的文件,并且在停止或重新启动 dyno 时,写入的任何文件都将被丢弃。例如,任何时候由于应用程序部署而更换测功机时都会发生这种情况,并且作为正常测功机管理的一部分,大约每天一次。
当您部署新版本时会发生这种情况,并且在其他情况下也会发生这种情况,至少每天一次。
Heroku的官方建议是将上传的文件存储在 Amazon S3 等第三方服务上。
¹尽管可能值得验证您.gitignore
的配置是否正确,因为这也可能是一个问题。尝试运行git check-ignore -v public/uploads/some-file-that-exists
。您应该看到一个响应引用了导致该文件被忽略的忽略规则。
推荐阅读
- sql - 如何在特定日期运行 SQL 作业?
- swagger - 招摇路径中的安全字段
- kotlin - Kotlin 将 KType 作为泛型参数传递
- javascript - 如何在javascript中从循环结果中加入不同的数组值
- c - 不使用 atoi() 将字符添加为整数?
- amazon-web-services - 一个 lambda 调用另一个 lambda 是否通过互联网?
- css-animations - 仅使用 css 的多个文本块的文本淡入淡出
- firebase - 除了下载的数据之外,附加 Firebase 实时数据库侦听器是否有任何相关成本?
- java - 在 Java 中,我需要用户输入五个整数然后显示平均值。如何在不输入第 6 个条目的情况下获得总和中包含的第 5 个整数?
- javascript - 如何使传单弹出窗口跟随光标的位置?