Как вы обрабатываете развертывание рельсовых приложений с помощью подмодулей?

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

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

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

Я немного нуб на производственной стороне вещей.

Спасибо!

Ответы

Ответ 1

В соответствии с этот последний поток, 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

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

Ответ 2

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

set :deploy_via, :remote_cache`

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

Ответ 3

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

set :git_enable_submodules, true

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

set :git_submodules_recursive, true