2014-11-02 83 views
2

我當前名字空間看起來是這樣的:不要重複自己在Capistrano的3

namespace :deploy do 
    task :npm_install do 
    on roles :all do 
     within release_path do 
     execute :npm, :install 
     end 
    end 
    end 

    task :bower_install do 
    on roles :all do 
     within release_path do 
     execute './node_modules/.bin/bower', :install 
     end 
    end 
    end 

    task :build do 
    on roles :all do 
     within release_path do 
     invoke 'deploy:npm_install' 
     invoke 'deploy:bower_install' 
     end 
    end 
    end 

    after :finishing, :build 
end 

我不知道是否有一個另一種方式,以避免重複和rolesrelease_path嵌套塊。

我該如何寫得更簡潔?

+1

我沒有在網上找Capistrano的最佳實踐和代碼重構的足夠的信息。 – 2015-01-31 15:33:36

回答

1

我相信你寫它的方式是Capistrano的標準。例如,官方的Rails的任務,做同樣的方式:https://github.com/capistrano/rails/blob/master/lib/capistrano/tasks/assets.rake

namespace :assets do 
    task :precompile do 
    on release_roles(fetch(:assets_roles)) do 
     within release_path do 
     with rails_env: fetch(:rails_env) do 
      execute :rake, "assets:precompile" 
     end 
     end 
    end 
    end 

    task :backup_manifest do 
    on release_roles(fetch(:assets_roles)) do 
     within release_path do 
     # snipped… 
     end 
    end 
    end 

    task :restore_manifest do 
    on release_roles(fetch(:assets_roles)) do 
     within release_path do 
     # snipped… 
     end 
    end 
    end 
end