Capistrano部署环境判断异常:比较运算符失效问题排查
Capistrano部署环境判断失效的解决方案
嘿,问题出在你对Capistrano变量的引用方式上!你写的:deploy_to是Ruby的符号类型,它和你用来比较的字符串完全不是一回事,这就导致你的条件判断永远不会成立。
在Capistrano里,要获取配置变量的实际值,得用fetch(:deploy_to)(或者直接写deploy_to,Capistrano的DSL会帮你解析)。给你修正后的代码:
namespace :deploy do task :published do on release_roles :all do # 正确获取deploy_to的实际值再做比较 if fetch(:deploy_to) == "/home/master/applications/STAGING/public_html/" # 执行 staging 环境对应的命令 execute "cd /in/..." else # 执行 production 环境对应的命令 execute "cd /other/path/..." end end end end
另外推荐一个更靠谱的写法:直接判断Capistrano的stage变量,不用硬编码路径,后期维护更方便:
namespace :deploy do task :published do on release_roles :all do case fetch(:stage) when :staging execute "cd /in/..." when :production execute "cd /other/path/..." end end end end
这样不管你怎么调整deploy_to的路径,只要stage名称不变,判断逻辑就不会出错。
内容的提问来源于stack exchange,提问作者MikeMason
相关产品推荐
相关产品推荐

