为什么Capistrano在current_path中使用/ u / apps /,即使我已设置:deploy_to

时间:2012-09-10 18:24:27

标签: capistrano

由于某些原因,卡皮斯特拉诺几乎无法完成所有操作,因为它似乎认为我的current_path应该在/u/apps/。我已经设置了所有应该设置的变量(AFAIK),并且消除了所有其他类似的默认路径,但这个仍然存在。

以下是相关变量返回的值:

current_dir: current
releases_path: /var/www/vhosts/dev.www.example.com/html/releases
shared_path: /var/www/vhosts/dev.www.example.com/html/shared
current_path: /u/apps/www.example.com/current

我正在设置:deploy_to,所以不应该基于此计算current_path

set :deploy_to, "/var/www/vhosts/dev.www.example.com/"

3 个答案:

答案 0 :(得分:6)

kludgey解决方案只是手动

set :current_path, ""

better solution, which can be found explained in this e-mail thread by Jamis Buck himself,在设置另一个依赖current_path的变量时使用延迟评估。就我而言,我有一个像这样的设置

set :some_path_var, "#{current_path}/some/path/"

我不得不改成这样的事情:

set(:some_path_var) { "#{current_path}/some/path/" }

通过传入一个块,没有立即评估:some_path_var,并且没有根据current_path

的默认值强制:deploy_to进行评估

答案 1 :(得分:2)

所以我也遇到了这个问题,我发现这是最好的解决方案。

将此添加到您的config/deploy.rb

  desc "Make sure the symlink will be from the right directory"
  task :change_correct_dir, roles: :web do
    set :current_path, File.join(deploy_to, current_dir)
  end
  before "deploy:create_symlink", "deploy:change_correct_dir"

我从查看capistrano宝石的来源并找到了

这个想法

_cset(:current_path) { File.join(deploy_to, current_dir)

lib/capistrano/recipes/deploy.rb

答案 2 :(得分:1)

如果您未在cap命令中指定任务,也会发生这种情况。

cap deploy:setup

将尝试在/ u / apps

中设置Capistrano
cap production deploy:setup

将Capistrano设置在:deploy_to。

中指定的目录中