繁体   English   中英

每次部署 Rails 应用程序时都会自动删除文件夹内容

[英]Folder contents are automatically deleted every time I deploy my Rails app

我使用 CarrierWave 在 /public 文件夹下有一个目录,我将所有 PDF 文件存储在此目录下。 但问题是我一直在部署我的 Rails 应用程序的新版本时,这个目录会被清理并且所有文件都丢失了。 这个目录是在我的上传器下设置的。

我还有一个名为“private”的目录,我手动创建了该目录,以免在 WEB 上全局提供敏感文件。 这些文件也在新的部署过程之后消失了。

如何防止文件在部署过程中被删除?

谢谢。

我假设您正在使用一些自动化进行部署。 因为如果您手动更新服务器实例上的代码,那么您可以保留预先上传的文件,但使用手动方法更新代码不是一个好习惯。

所以在自动化部署中我们一般都遵循这种流程。 每当您部署它时,都会创建一个新的部署版本并将其设置为当前版本。

简而言之,这意味着它正在创建一个新目录并将您的 rails 项目放入其中。 现在,您存储在项目目录中的文件在以前的版本中存在,如果您使用任何 linux 实例,这些文件不会消失。(只有当您设置了这种方式来保留最后几个版本以恢复新部署的情况下)

到现在还清吗?

不是假设您没有保留任何以前的版本,您的文件就永远消失了。

因此,将任何文件存储在项目存储库下并不是一个好主意。

最佳实践是使用存储桶系统,如 AWS 存储桶或谷歌云存储桶,我们将所有上传的文件存储在其中。 如果桶不在预算之内,您可以在项目目录之外的 linux 服务器实例上选择不同的目录。 但是您必须设置所有这些上传路径和目录系统以用作存储桶。

当您使用 capistrano 进行部署时,会从存储库中创建一个新的部署(文件夹)。

任何不在存储库中的文件都不会被转移。

如果要公开保存文件,则需要先在服务器中创建一个目录,然后在该文件夹的 public 中创建一个带有 capistrano 的符号链接。

然后将您的载波上传保存到该位置。

在每个部署期间,上限将符号链接到该目录,并且您的文件将在那里

我面临的这个问题是由于 capistrano 而发生的。 每次我在服务器上运行 cap production deploy 命令时,capistrano 部署工具都会将每个文件与 git repo 同步。 当然,最终用户添加的文件不会存储在我的 git 存储库下,因此 capistrano 会将空的公用文件夹从我的存储库覆盖到服务器。 在 deploy.rb 下添加 path to:linked_dirs 变量解决了我的问题。

另一种方法可能是使用项目根路径以外的目录(例如 /home/files)来存储所有文件。 通过这样做,您将从项目中分离您的文件,并防止 capistrano 的覆盖问题。

希望这些信息对某人或未来的我有用:)..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM