如何在部署之前缩小源代码

时间:2011-12-28 00:25:49

标签: git capistrano minify

我正在通过使用capistrano从git部署一个php项目。我目前正在通过一些capistrano任务缩小我的javascript(使用jammit)和css(使用yui)。我看到的问题是我在目标服务器上进行这种缩小,而不是在本地预先部署代码库。引起关注的原因是我将javascript缩小从yui切换到jammit,并且当我的部署服务器已安装它时,不希望必须在多个生产服务器上安装这个新的ruby gem。我从anohter开发人员那里继承了capistrano文件,所以我不是100%清楚代码被检出的过程,以及它何时被发送到远程服务器,以及我应该挂钩的任务。

我最初的想法是before "deploy",但我不确定我是否有可用的源代码。

1 个答案:

答案 0 :(得分:1)

简短的回答是“你没有”。 deploy挂钩调用deploy:update_code

  

部署:update_code,{:except => {:no_release => true}}

     

将项目复制到远程服务器。这是任何部署的第一阶段;将更新的代码和资产移动到部署服务器。但是,您很少会直接调用此任务;相反,你应该调用deploy’ task (to do a complete deploy) or the更新'任务(如果你想单独执行`restart'任务)。

     

您需要确保将:scm变量设置为您正在使用的源控制软件(默认为:subversion),并将:deploy_via变量设置为您要用于部署的策略(默认为:结帐)。

以下是一举一动:

  1. 结帐代码
  2. 压缩代码
  3. 将代码移至远程服务器
  4. 清理本地代码
  5. (根据您的部署设置有一些变化)。

    然而, 通过利用下载和上传命令,我能够解决这个问题。

    tmp_path = "/tmp/#{release_name}/public"
    download "#{current_path}/public/javascripts", "#{tmp_path}/javascripts/":via => :scp, :recurisve => true
    system "jammit -o #{tmp_path}/javascripts -c #{tmp_path}/javascripts/assets.yml"
    upload  "#{tmp_path}/javascripts/common.js", "#{current_path}/public/javascripts", :via => :scp
    system "rm -rf #{tmp_path}"
    

    我不喜欢它,因为它不是那么干净,但它可以按照我需要的方式完成工作。