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

StackOverflow https://stackoverflow.com/questions/953658

Вопрос

Недавно я превратил пару своих плагинов в подмодули и понял, что когда вы "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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top