由于某些原因,卡皮斯特拉诺几乎无法完成所有操作,因为它似乎认为我的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/"
答案 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
中设置Capistranocap production deploy:setup
将Capistrano设置在:deploy_to。
中指定的目录中