每次部署我的 Rails 应用程序时,文件夹内容都会自动删除
Folder contents are automatically deleted every time I deploy my Rails app
我在 /public 文件夹下有一个目录,使用 CarrierWave 我将所有 PDF 文件存储在这个目录下。但问题是我一直在部署我的 Rails 应用程序的新版本,这个目录被清理并且所有文件都丢失了。这个目录是在我的上传器下设置的。
我还有一个名为“private”的目录,这是我手动创建的,目的是不在 WEB 上全局提供敏感文件。这些文件在新部署过程后也消失了。
如何防止文件在部署过程中被删除?
谢谢。
我假设您正在使用一些自动化部署。因为如果您手动更新服务器实例上的代码,那么您可以保留预先上传的文件,但是使用手动方法更新代码不是一个好习惯。
所以在自动化部署中我们一般都是按照这样的流程。
每当您部署时创建一个新的部署版本并将其设置为当前版本。
简单地说,这意味着它正在创建一个新目录并将您的 rails 项目放入其中。现在,您存储在项目目录中的文件在以前的版本中存在,如果您使用任何 linux 实例,这些文件不会消失。(仅当您以这种方式设置以保留最后几个版本以恢复新版本展开部署)
现在还清楚吗?
假设您没有保留任何以前的版本,您的文件将永远消失。
因此,在项目存储库下存储任何文件都不是一个好主意。
最佳做法是使用存储桶系统,如 AWS 存储桶或 Google 云存储桶,我们在其中存储所有上传的文件。如果存储桶不在预算之内,您可以在项目目录之外的 linux 服务器实例上选择不同的目录。但是您必须设置所有这些上传路径和目录系统才能用作存储桶。
当您使用 capistrano 进行部署时,会从存储库创建一个新的部署(文件夹)。
任何不在存储库中的文件都不会被继承。
如果您想将文件保存在 public 中,您需要先在服务器中创建一个目录,然后在 public 中使用 capistrano 创建一个指向该文件夹的符号链接。
然后将您的载波上传保存到该位置。
在每个部署期间,cap 将符号链接到该目录,您的文件将在那里
我面临的这个问题是因为 capistrano 而发生的。每次我在服务器上执行 运行 cap production deploy 命令时,capistrano 部署工具都会将每个文件与 git 存储库同步。当然,最终用户添加的文件不会存储在我的 git 回购协议下,因此 capistrano 会将空的 public 文件夹从我的回购协议覆盖到服务器。将路径添加到 deploy.rb 下的 :linked_dirs 变量解决了我的问题。
另一种方法是使用项目根路径以外的目录(例如 /home/files)来存储所有文件。通过这样做,您将把您的文件与项目分开,并防止 capistrano 的覆盖问题。
希望这些信息对某人或未来的我有用:) ..
我在 /public 文件夹下有一个目录,使用 CarrierWave 我将所有 PDF 文件存储在这个目录下。但问题是我一直在部署我的 Rails 应用程序的新版本,这个目录被清理并且所有文件都丢失了。这个目录是在我的上传器下设置的。
我还有一个名为“private”的目录,这是我手动创建的,目的是不在 WEB 上全局提供敏感文件。这些文件在新部署过程后也消失了。
如何防止文件在部署过程中被删除?
谢谢。
我假设您正在使用一些自动化部署。因为如果您手动更新服务器实例上的代码,那么您可以保留预先上传的文件,但是使用手动方法更新代码不是一个好习惯。
所以在自动化部署中我们一般都是按照这样的流程。 每当您部署时创建一个新的部署版本并将其设置为当前版本。
简单地说,这意味着它正在创建一个新目录并将您的 rails 项目放入其中。现在,您存储在项目目录中的文件在以前的版本中存在,如果您使用任何 linux 实例,这些文件不会消失。(仅当您以这种方式设置以保留最后几个版本以恢复新版本展开部署)
现在还清楚吗?
假设您没有保留任何以前的版本,您的文件将永远消失。
因此,在项目存储库下存储任何文件都不是一个好主意。
最佳做法是使用存储桶系统,如 AWS 存储桶或 Google 云存储桶,我们在其中存储所有上传的文件。如果存储桶不在预算之内,您可以在项目目录之外的 linux 服务器实例上选择不同的目录。但是您必须设置所有这些上传路径和目录系统才能用作存储桶。
当您使用 capistrano 进行部署时,会从存储库创建一个新的部署(文件夹)。
任何不在存储库中的文件都不会被继承。
如果您想将文件保存在 public 中,您需要先在服务器中创建一个目录,然后在 public 中使用 capistrano 创建一个指向该文件夹的符号链接。
然后将您的载波上传保存到该位置。
在每个部署期间,cap 将符号链接到该目录,您的文件将在那里
我面临的这个问题是因为 capistrano 而发生的。每次我在服务器上执行 运行 cap production deploy 命令时,capistrano 部署工具都会将每个文件与 git 存储库同步。当然,最终用户添加的文件不会存储在我的 git 回购协议下,因此 capistrano 会将空的 public 文件夹从我的回购协议覆盖到服务器。将路径添加到 deploy.rb 下的 :linked_dirs 变量解决了我的问题。
另一种方法是使用项目根路径以外的目录(例如 /home/files)来存储所有文件。通过这样做,您将把您的文件与项目分开,并防止 capistrano 的覆盖问题。
希望这些信息对某人或未来的我有用:) ..