我正在通过使用capistrano从git部署一个php项目。我目前正在通过一些capistrano任务缩小我的javascript(使用jammit)和css(使用yui)。我看到的问题是我在目标服务器上进行这种缩小,而不是在本地预先部署代码库。引起关注的原因是我将javascript缩小从yui切换到jammit,并且当我的部署服务器已安装它时,不希望必须在多个生产服务器上安装这个新的ruby gem。我从anohter开发人员那里继承了capistrano文件,所以我不是100%清楚代码被检出的过程,以及它何时被发送到远程服务器,以及我应该挂钩的任务。
我最初的想法是before "deploy"
,但我不确定我是否有可用的源代码。
答案 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变量设置为您要用于部署的策略(默认为:结帐)。
以下是一举一动:
(根据您的部署设置有一些变化)。
然而, 通过利用下载和上传命令,我能够解决这个问题。
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}"
我不喜欢它,因为它不是那么干净,但它可以按照我需要的方式完成工作。