2014-10-08 3 views
1

Наше приложение (1 репо) имеет бэкэнд Rails и угловой интерфейс. Таким образом, в какой-то момент процесс развертывания имеет npm install, bower install, grunt build --force. Проблема в том, что развертывание занимает много времени, так как эти команды все еще выполняются, хотя мы просто обновляем связанные с Rails вещи.Capistrano: Проверьте, изменилась ли папка в Git?

Есть ли какой-нибудь крючок, чтобы я мог проверить это if the folder containing frontend code has changes, then npm install? Или мы должны просто разделить репо на два РЕПО с их собственными процессами развертывания?

ответ

0

apistrano-faster-assets плагины обеспечивают такую ​​функциональность для простых ресурсов Rails.

Возможно, вы захотите проверить core task to see how that's done и скорректировать или скопировать код для вашего использования.

Вот моя попытка извлечь только соответствующие шаги и обеспечить еще несколько комментариев:

class PrecompileRequired < StandardError; end 
begin 
    # get the previous release 
    latest_release = capture(:ls, '-xr', releases_path).split[1] 

    # precompile if this is the first deploy 
    raise PrecompileRequired unless latest_release 

    # create a 'Pathname' object for latest_relase 
    latest_release_path = releases_path.join(latest_release) 

    # execute raises if there is a diff 
    execute(:diff, '-Naur', release_path.join('path/to/frontend/code'), latest_release_path.join('path/to/frontend/code')) rescue raise(PrecompileRequired) 

    info("Skipping asset precompile, no asset diff found") 

    # copy over all of the assets from the last release 
    execute(:cp, '-r', latest_release_path.join('public', fetch(:assets_prefix)), release_path.join('public', fetch(:assets_prefix))) 

rescue PrecompileRequired 
    # execute compile command here 
end 
Смежные вопросы