0

我在 cloudcontrol.com 上托管我的 php 项目,在我的项目中,我有一个静态文件夹,用于保存用户个人资料图片,如下所示:

uploads/profile/userpic1.jpg
uploads/profile/userpic2.jpg
uploads/profile/userpic2.jpg

我使用 .gitignore 文件对配置文件文件夹中的所有文件进行 .gitignore 处理:

*
!.gitignore

在我的本地环境中,当我进行一些测试时,我会在该文件夹中上传一些图片。在我的生产环境中,用户还会更改他们的个人资料图片并将其保存在该文件夹中。

我的问题是:

每当我将任何更新推送到生产服务器时,我都会丢失服务器上配置文件目录中的所有文件!似乎 git (或 cloudcontrol) 替换配置文件目录不仅更新其内容而不触及旧文件/图片。

任何建议我该如何解决这个问题。我认为这只是一个 .gitignore 问题,我尽一切努力完成这项工作,但我做不到。我对 Git 和 PaaS 有点陌生。

谢谢

4

2 回答 2

3

cloudControl 与大多数云应用程序托管商一样,会在部署时替换完整的应用程序文件夹。这样做通常是为了允许水平扩展并确保每个部署都基于相同的(空)状态。

另请参阅有关非持久文件系统的文档:

非持久文件系统

TL;博士:

  • 每个容器都有自己的文件系统。
  • 文件系统不是持久的。
  • 不要在文件系统上存储上传。

cloudControl 平台上的部署可以访问可写文件系统。然而,这个文件系统不是持久的。写入的数据可能会或可能不会在未来的请求中再次访问,具体取决于路由层如何跨可用容器路由请求,并在每次部署后被删除。这确实包括您手动触发的部署,但也包括在正常操作期间由平台本身完成的重新部署。

对于客户上传(例如用户个人资料图片),我们推荐像 Amazon S3 这样的对象存储或作为 MongoLab 插件的一部分提供的 GridFS功能

因此,如果您想动态存储文件,您将不得不为此寻找一个单独的解决方案。

于 2014-11-17T01:28:46.003 回答
0

这就是大多数使用 git 的部署应用程序的工作方式。无论如何,git 不是最适合版本控制资产,它应该主要用于代码。话虽如此,.gitignore只要您在想要版本化的内容和不想要版本化的内容之间有一个明确的标识符,您仍然可以使用。说所有你自己的文件都以version你可以做这样的事情开头

/public/assets/images/users/*
!/public/assets/images/users/version*
于 2014-11-17T01:46:39.433 回答