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

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

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

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

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

Спасибо!


person Tony    schedule 04.06.2009    source источник


Ответы (3)


Согласно этой недавней ветке, 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

Если у вас есть вложенные подмодули < / strong>, вам необходимо:

gem sources -a http://gems.github.com
$ sudo gem install morhekil-capistrano-deepmodules

Просто потребуйте его в конфигурации развертывания:

требуется 'capistrano / deepmodules'

Обо всем остальном гем позаботится автоматически.
Вы можете удалить :git_enable_submodules из своей конфигурации, гем не обращает на это внимания - если вам это нужно, вы уже говорите, что хотите включить подмодули.

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

set :deploy_via, :remote_cache

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

person VonC    schedule 05.06.2009

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

set :deploy_via, :remote_cache`

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

person Zubin    schedule 06.04.2011

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

set :git_enable_submodules, true

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

set :git_submodules_recursive, true

person Stuart M    schedule 18.01.2013