我正在运行一个允许用户将图像上传到服务器的Web服务器。但是,我使用 git 来管理我的源代码,git push
操作会删除服务器上与本地结帐不匹配的任何内容 - 所以每次运行时都会丢失图像git push
!
起初我以为我可以保护上传文件夹,所以我尝试了其他帖子中建议的所有这些内容:
git rm --cached -r uploads
git update-index --assume-unchanged uploads
这些都没有解决问题 - 当我git push
时,远程目录总是消失。
接下来,我决定将上传的文件放在git工作区之外,以便git push
不删除它。然后我从公共目录创建了一个符号链接到私有目录,这样我就可以公开看到这些文件了。到目前为止一切都那么好......但是,每当我运行git push
时,它都会删除符号链接!
最后,我想也许每次推送时都可以使用 post-receive git hook来创建符号链接,但是我的web服务器(openshift)已经在使用该钩子了。并且不允许我编辑它。
肯定有一种简单的方法可以做到这一点?!请帮忙!
答案 0 :(得分:2)
与大多数平台即服务提供商一样,每次push
时,OpenShift都会部署应用程序的全新版本。默认情况下,Git未跟踪的任何内容都不会包含在新版本中。
您有几个选择:
OpenShift支持persistent data storage using a special directory:
存储必须在部署中保留的文件的最佳做法是使用'数据'位于git存储库一级的目录。您可以使用$ OPENSHIFT_DATA_DIR env变量在主机上引用它。例如:
如果您创建一个名为" bunny"的php应用程序。 repo的php / index.php文件部署到:
〜/ {cartridge name} /repo/php/index.php
然后,数据目录被部署到
〜/ {cartridge name} / app-root / data /
因此,从php / index.php文件中,如果将文件保存到" ../../../ data / blah.txt"它将被放置在repo目录之外的数据目录中。
将生成/上传的资源存储在其他位置。
这是像Heroku这样的PaaS提供商所青睐的方法。而不是在PaaS服务器上存储用户上传和其他生成的内容,store it on something like Amazon S3。
答案 1 :(得分:2)
您应该使用部署操作挂钩在OPENSHIFT_DATA_DIR中创建符号链接,您可以在此处查看WordPress快速入门中如何执行此操作的示例:https://github.com/openshift/wordpress-example/blob/master/.openshift/action_hooks/deploy
OPENSHIFT_DATA_DIR在部署之间持续存在,但不会在缩放应用程序中的齿轮之间共享。
答案 2 :(得分:0)
是的,您推送的git repo不应该是具有工作目录的存储库。它应该是一个bare
存储库,它以
git --bare init
如果您仍想使用目标计算机,最好的解决方案是使用两个存储库(一个裸存储,一个不存储),推送到裸存,然后使用挂钩,拉到正常。可以在 here 找到此设置的示例。