2011-12-28 77 views
2

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

我最初的想法是做到这一点before "deploy"但我不知道我会有源代码可用于采取行动。

回答

1

简短的回答是“你不要”。该deploy勾调用部署:update_code

部署:update_code,{:除了=> {:no_release =>真}}

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

您需要确保将scm变量设置为您使用的源代码管理软件(默认为subversion),并将:deploy_via变量设置为您要用于部署的策略(默认为:查看)。

这确实在一个下面一举:

  1. 结帐代码
  2. 拉上代码
  3. 移动代码到远程服务器
  4. 清理本地代码

(根据您的部署设置有一些变化)。

但是, 我能够利用下载和上传命令来解决这个问题。

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}" 

我不喜欢它,因为它不是很干净,但它完成了我需要完成的工作。