10

出于某种原因,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/"
4

3 回答 3

6

那种笨拙的解决方案就是手动

set :current_path, ""

更好的解决方案(可以在 Jamis Buck 本人在此电子邮件线程中解释)是在设置另一个依赖于的变量时使用惰性求值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

于 2012-09-10T18:26:13.270 回答
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 gem 的来源并找到了这个想法

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

lib/capistrano/recipes/deploy.rb

于 2013-01-25T02:45:04.023 回答
1

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

cap deploy:setup

将尝试在 /u/apps 中设置 Capistrano

cap production deploy:setup

将在 :deploy_to 指定的目录中设置 Capistrano。

于 2013-05-20T15:44:35.137 回答