У меня есть проект, который использует Serve и контролируется версиями с помощью Git. Служба создает output
папку со статическими файлами, которые я хочу развернуть в Heroku.
Я не хочу развертывать сам проект Serve, поскольку стек Heroku Cedar, похоже, не слишком любит его, но, что наиболее важно, я хочу воспользоваться отличной поддержкой Heroku для статических веб-сайтов.
Есть ли способ развернуть подпапку на git remote? Должен ли я создать репозиторий Git в output
папке (звучит неправильно) и отправить его в Heroku?
Ответы:
Есть еще более простой способ - через git-subtree . Предполагая, что вы хотите отправить свою папку output как корень Heroku, вы можете сделать:
В настоящее время кажется, что git-subtree включается в git-core, но я не знаю, была ли выпущена эта версия git-core.
источник
--force
, используйтеgit push heroku `git subtree split --prefix output master`:master --force
. См. Stackoverflow.com/a/15623469/2066546 .git subtree push --prefix output heroku +refs/tags/v1.0.0:refs/heads/master
. Но это не работает и возвращается+refs/tags/v1.0.0:refs/heads/master does not look like a ref
. Мне нужна такая функциональность, чтобы в дальнейшем иметь возможность возвращаться к определенным тегам. Как правильно это сделать?output
папку, которая присутствовала только в моейdevelop
ветке, вheroku master
ветку без необходимости указыватьdevelop:master
, поэтому, по-видимому, она перемещается в указанную вами целевую ветку из текущей проверенной ветки.Я начал с того, что сказал Джон Берриман, но на самом деле это может быть проще, если вас совсем не заботит история heroku git.
Думаю, официальный
git subtree
- лучший ответ, но у меня возникла проблема с тем, чтобы поддерево работало на моем Mac.источник
У меня была аналогичная проблема. В моем случае никогда не было проблемой удалить все в репозитории heroku и заменить его тем, что находится в моем подкаталоге. Если это ваш случай, вы можете использовать следующий сценарий bash. Просто поместите его в каталог вашего приложения Rails.
Я уверен, что есть много способов улучшить это - так что не стесняйтесь рассказывать мне, как!
источник
+1
Спасибо. Это решение отлично работает, если вам не нужны журналы git на Heroku. Можно настроить приведенный выше сценарий, если есть некоторые папки, которые вы хотите игнорировать, в подпутье приложения, которое будет развернуто. Я например не хотелspec
папку на героку. Example Gist+1
но вы можете упростить, не вытаскивая и сливаясь с мастером heroku, а вместо этого простоgit push --force heroku master
После долгого и тяжелого месяца пробовать разные вещи и каждый раз меня кусали, я понял,
только потому, что Heroku использует репозиторий git в качестве механизма развертывания, вы не должны рассматривать его как репозиторий git
это могло быть и rsync, они пошли на git, не отвлекайтесь из-за этого
если вы сделаете это, вы откроете себя для всех видов боли. Все вышеупомянутые решения где-то с треском проваливаются:
bundle deploy
- сбой, вам нужно каждый раз связывать обновление:path
+bundle deploy
- неудачно, команда разработчиков рассматривает:path
вариант как «вы не используете Bundler с этим параметром драгоценного камня», поэтому он не будет комплектоваться для производства/vendor
символической ссылки при разработке и фактически копировать файлы для производстваРешение
Рассматриваемое приложение имеет 4 проекта в git root:
У всех проектов есть
vendor/common
символическая ссылка, указывающая на кореньcommon
движка. При компиляции исходного кода для развертывания в heroku нам нужно удалить символическую ссылку и rsync, чтобы его код физически находился в папке vendor каждого отдельного хоста.Работает очень-очень красиво в условиях дикой природы с минимальными (нет?) Проблемами уже 6 месяцев
Вот сценарий https://gist.github.com/bbozo/fafa2bbbf8c7b12d923f
Обновление 1
@AdamBuczynski, никогда не бывает так просто.
1-й, у вас всегда будет как минимум производственная и тестовая среда - и, в худшем случае, куча специфичных для функций кластеров - внезапно 1 папка должна быть сопоставлена с n проектами heroku в качестве довольно простого требования, и все это нужно как-то организовать так, чтобы сценарий «знает», какой источник вы хотите развернуть,
sync_common
Во-вторых, вы захотите поделиться кодом между проектами - теперь наступает часть, махинации с символическими ссылками в разработке заменяются реальным rsynced кодом на Heroku, потому что Heroku требует определенной структуры папок и бандлера, а rubygems действительно действительно очень сильно делают вещи уродливыми, если вы хочу извлечь общие нити в драгоценный каменьВ-третьих, вы захотите подключить CI, и это немного изменит то, как должны быть организованы подпапки и репозиторий git, в конце концов, в самом простом варианте использования вы получите вышеупомянутую суть.
В других проектах мне нужно подключать сборки Java, при продаже программного обеспечения нескольким клиентам вам нужно будет фильтровать модули, которые устанавливаются, в зависимости от требований к установке и еще много чего,
Мне действительно стоит подумать о том, чтобы объединить вещи в Rakefile или что-то в этом роде и сделать все таким образом ...
источник