Как вы справляетесь с развертыванием приложений рельсов с подмодулями? - PullRequest
13 голосов
/ 05 июня 2009

Я недавно превратил пару своих плагинов в подмодули и понял, что когда вы "git clone" хранилище, каталог подмодуля будет пустым. Для со-разработчиков имеет смысл инициализировать свои подмодули и обновить их.

Однако при развертывании с capistrano код субмодуля, очевидно, не будет развернут, что вызывает проблемы. Я мог бы зайти в ветку релиза, инициализировать и обновить модуль там, но это, очевидно, не идеальное решение.

У кого-нибудь есть предложения о том, как с этим справиться? Это так же просто, как задание капистрано?

Я немного новичок в производственной сфере.

Спасибо!

Ответы [ 3 ]

12 голосов
/ 05 июня 2009

Согласно этой недавней теме , capistrano должен иметь возможность инициировать и обновлять ваши подмодули:

set :git_enable_submodules,1

в config / deploy.rb должно быть достаточно, если ваши .gitmodules записи обновлены.
Вам может понадобиться для исправления Capistrano (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 из вашей конфигурации, гем не обращает на это внимания - если вам это требуется, вы уже говорите, что хотите включить подмодули.

И еще одна деталь, на которую следует обратить внимание - в данный момент гем поддерживает только стратегию удаленного кэширования. Это означает, что вы ДОЛЖНЫ добавить к своему config следующую строку:

set :deploy_via, :remote_cache

Он включает удаленный кеш, и это действительно то, что вы хотите делать в любом случае - развертывание больших кодовых баз с большим количеством субмодулей и другими вещами действительно проблематично, если у вас нет кеша на стороне сервера.

5 голосов
/ 18 января 2013

При этом коммите Capistrano поддерживает оба подмодуля Git и опцию --recursive. Чтобы включить поддержку подмодулей Git, добавьте это в файл deploy.rb:

set :git_enable_submodules, true

И если вы используете рекурсивные подмодули Git , добавьте также:

set :git_submodules_recursive, true

5 голосов
/ 06 апреля 2011

set :git_enable_submodules, 1 сам по себе не работал без этой опции:

set :deploy_via, :remote_cache`

Это нигде не было задокументировано, и мне понадобилось время, чтобы выяснить это. Как правило, такой вариант в любом случае хорош, даже без подмодулей.

...