Capistrano:检查Git中的文件夹是否已更改?

时间:2014-10-08 10:14:46

标签: ruby-on-rails capistrano capistrano3

我们的应用程序(1个回购站)有一个Rails后端和一个Angular前端。因此,部署过程在某些时候有npm install, bower install, grunt build --force。问题是部署需要很长时间,因为即使我们只是更新与Rails相关的东西,这些命令仍然会被执行。

是否有某种钩子以便我可以检查if the folder containing frontend code has changes, then npm install?或者我们应该将repo分成两个repos,每个repos都有自己的部署流程?

1 个答案:

答案 0 :(得分: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