2015-02-05 14 views
2

Я запускаю веб-сервер, который позволяет пользователям загружать изображения на сервер. Тем не менее, я использую git для управления моим исходным кодом, а операция git push удаляет что-либо на сервере, который не соответствует моей местной проверке, поэтому я теряю изображения каждый раз, когда я запускаю git push!«git push» удаляет необработанные удаленные файлы

Сначала я думал, что я мог бы быть в состоянии защитить папку загрузки, поэтому я попытался все эти вещи, как предложено в других постах:

  • добавления в каталог в .gitignore,
  • git rm --cached -r uploads
  • git update-index --assume-unchanged uploads

ни один из них не решает проблему - удаленный каталог всегда disappe ars, когда я делаю git push.

Далее я решил разместить загруженные файлы за пределами рабочей области git, так что git push не удаляет его. Затем я создал символическую ссылку из общего каталога в частный каталог, чтобы публиковать файлы. Пока что так хорошо ... Однако, когда я запускаю git push, он удаляет символическую ссылку!

Наконец, я подумал, что, возможно, я мог бы использовать после приема GIT крюка, чтобы создать символическую ссылку каждый раз, когда я нажимаю, но мой веб-сервер (OpenShift) уже использует этот крюк для чего-то еще и не будет позвольте мне отредактировать его.

Есть, конечно, простой способ сделать это ?! Пожалуйста помоги!

+0

Вы должны зафиксировать до нажатия. –

+0

Да, очевидно, но файлы, созданные на сервере, никогда не входят в мой рабочий каталог для совершения – IanS

ответ

2

Вы должны создать символические ссылки в на OPENSHIFT_DATA_DIR с помощью крючка развернуть действие, вы можете просмотреть пример того, как сделать это в QuickStart WordPress здесь: https://github.com/openshift/wordpress-example/blob/master/.openshift/action_hooks/deploy

OPENSHIFT_DATA_DIR сохраняется между разворачивает, но НЕ распределенных между передачами в масштабированном приложении.

+0

А, я смотрел только на крючки GIT, я не знал о ДЕЙСТВИТЕЛЬНЫХ КНИГАХ с открытием. Это должно решить мою проблему. Благодаря! – IanS

+2

https://developers.openshift.com/ru/managing-action-hooks.html – IanS

0

Да, git repo, на который вы нажимаете, не должен быть репозиторием с рабочим каталогом. Он должен быть bare репозиторий, который инициируется с

git --bare init 

Если вы все еще хотите работать на целевой машине, лучшим решением было бы использовать два хранилища (один голый и один нет), вы нажимаете на голое , а затем с помощью крючка потяните в нормальное положение. Пример для этой установки можно найти here.

2

Как и большинство платформ как поставщиков услуг, OpenShift развертывает всю новую версию вашего приложения каждый раз, когда вы push. По умолчанию все, что не отслеживается Git, не будет включено в новую версию.

У вас есть несколько вариантов:

  1. OpenShift поддерживает persistent data storage using a special directory:

    Лучшая практика для хранения файлов, которые должны сохраняющиеся по развертыванию является использование каталога «данных», который находится на один уровень от вашего репозитория git. Вы можете использовать переменную env $ OPENSHIFT_DATA_DIR, чтобы ссылаться на нее на хосте. Например:

    Если вы создаете приложение php, называемое «зайчик». PHP/индекс репо.файл PHP развертывается в:

    ~/{имя} картриджа /repo/php/index.php

    каталога данных, а затем, развертывается в

    ~/{имя патрона}/app- root/data/

    Поэтому из файла php/index.php, если вы сохраните файл в «../../../data/blah.txt», он будет помещен вне вашего каталога репо в каталог данных.

  2. Хранить сгенерированные/загруженные активы в другом месте.

    Это подход, которым пользуются провайдеры PaaS, такие как Heroku. Вместо хранения пользовательских загрузок и другого сгенерированного контента на сервере PaaS, store it on something like Amazon S3.

+0

Спасибо. В моем посте я объясняю, что я могу хранить файлы «за пределами рабочей области git». Я действительно использую $ OPENSHIFT_DATA_DIR. Однако моя проблема заключается в том, что сохраненные там изображения не являются общедоступными, поэтому я не могу отображать их на своем сайте. – IanS

Смежные вопросы