Capistrano中current_path
和release_path
路径变量之间的区别是什么,如
task :path do
on roles :app do
puts "Release path: #{release_path}"
puts "Current path: #{current_path}"
end
end
current_path
是否始终包含最新代码?
答案 0 :(得分:3)
由于这还没有得到满意的答案,我将添加我发现的内容。
查看this blog post,我们可以看到路径变量指向的位置:
current_path - deploy_to + current_dir的路径(例如/ u / apps / example / current) release_path - releases_path + release_name的路径(例如/ u / apps / example / releases / 20100624000000)
所以回答你的问题:是的,current_path
确实指向最新的代码(最新的部署)。它通过符号链接指向最新版本目录。如果您对所有文件夹的含义感兴趣,请查看capistrano structure。
与release_path
的区别在于它指向您当前正在部署的版本的路径。如果要在部署期间引用repo中的文件(例如运行脚本),这将非常有用。
但是,release_path
仅在deploy:starting
命名空间内更新,在任何其他时间,它与current_path
完全相同。
有关详细信息,请参阅此github isssue。
我的特定用例是,我想使用位于我的回购根目录中的composer install
运行composer.phar
。所以,在the documentation之后我做了这个:
SSHKit.config.command_map[:composer] = "#{release_path}/composer.phar"
但这不起作用,因为在定义时,release_path
仍然指向current_path
。
我找到的解决方法来自this answer,并且可以懒惰地评估release_path
:
SSHKit.config.command_map[:composer] = lambda { "#{release_path}/" + fetch(:src_path) + "/composer.phar" }
只要在deploy:starting
命名空间后访问变量,release_path
就会按照我们的预期设置。
答案 1 :(得分:-2)
每次使用Capistrano部署Rails应用程序时,都会在Releases
目录中使用较新版本的文件名创建一个新目录。该目录包含最新的代码。并且current symlink directory
将指向运行应用程序的最新创建目录。
任务rake,bundle等将在共享路径目录上运行,该目录创建单独的目录
我们可以恢复使用rollback
命令的版本,例如
cap deploy:rollback # capistrano 2
cap stage_name rollback #capistrano 3
希望它对你有所帮助。