Как вы справляетесь с развертыванием приложений rails с помощью подмодулей?
-
11-09-2019 - |
Вопрос
Недавно я превратил пару своих плагинов в подмодули и понял, что когда вы "git clone" создаете репозиторий, каталог подмодулей будет пуст.Это имеет смысл для соразработчиков инициализировать свои подмодули и обновлять их.
Однако, когда я выполняю развертывание с помощью capistrano, код подмодуля, очевидно, не будет развернут, что вызывает проблемы.Я мог бы зайти в ветку release и инициализировать и обновить модуль там, но это, очевидно, не идеальное решение.
У кого-нибудь есть предложения о том, как с этим справиться?Это так же просто, как задача capistrano?
Я немного новичок в производственной части.
Спасибо!
Решение
Согласно эта недавняя тема, capistrano должен иметь возможность инициализировать и обновлять ваши подмодули:
set :git_enable_submodules,1
в config/deploy.rb должно быть достаточно, если ваш .gitmodules
записи обновлены.
Вам может понадобиться чтобы залатать Капистрано (lib/capistano/recipes/deploy/scm/git.rb
) однако, чтобы убедиться, что ваши подмодули будут включены.
def checkout(revision, destination)
git = command
branch = head
fail "No branch specified, use for example 'set :branch, \"origin/master\"' in your deploy.rb" unless branch
if depth = configuration[:git_shallow_clone]
execute = "#{git} clone --depth #{depth} #{configuration[:repository]} #{destination} && "
else
execute = "#{git} clone #{configuration[:repository]} #{destination} && "
end
execute += "cd #{destination} && #{git} checkout -b deploy #{branch}"
if submodules = configuration[:git_enable_submodules]
execute += " && git-submodule init &&"
execute += "git-submodule update"
end
execute
end
Если у вас есть вложенные подмодули, вам нужно:
gem sources -a http://gems.github.com
$ sudo gem install morhekil-capistrano-deepmodules
Просто требуйте этого в вашей конфигурации развертывания:
требуется 'capistrano/deepmodules'
Драгоценный камень позаботится обо всем остальном автоматически.
Вы можете удалить:git_enable_submodules
судя по вашей конфигурации, gem не обращает на это внимания - если вам это требуется, вы уже говорите, что хотите включить подмодули.И еще одна деталь, на которую следует обратить внимание - на данный момент gem поддерживает только стратегию удаленного кэширования.Это означает, что вы ДОЛЖНЫ добавить к своему
config
следующая строка:
set :deploy_via, :remote_cache
Это позволяет использовать удаленный кеш, и это действительно то, что вы хотите сделать в любом случае - развертывание больших кодовых баз с большим количеством подмодулей и прочего хлама действительно проблематично, если у вас нет кеша на стороне сервера.
Другие советы
set :git_enable_submodules, 1
само по себе это не работало без этой опции:
set :deploy_via, :remote_cache`
Похоже, это нигде не было задокументировано, и мне потребовалось некоторое время, чтобы разобраться.В любом случае, как правило, хорошо иметь такую опцию, даже без подмодулей.
С этот коммит, Capistrano поддерживает как подмодули Git, так и встроенную опцию --recursive.Чтобы включить поддержку подмодулей Git, добавьте это в свой deploy.rb
файл:
set :git_enable_submodules, true
И если вы используете рекурсивные подмодули Git, добавьте это также:
set :git_submodules_recursive, true