2014-10-08 64 views
1

我们的应用程序(1回购)有一个Rails后端和一个Angular前端。因此,部署过程在某个时候有一个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 
相关问题