Capistrano中current_path与release_path之间的区别?

Der*_*rek 7 capistrano ruby-on-rails

Capistrano中的current_pathrelease_path路径变量有什么区别,如

task :path do
    on roles :app do
        puts "Release path: #{release_path}"
        puts "Current path: #{current_path}"
    end
end
Run Code Online (Sandbox Code Playgroud)

是否current_path总是包含最新的代码?

Yep*_*_Me 7

既然没有令人满意的答案,我将补充发现的内容。

查看此博客文章,我们可以看到路径变量指向的位置:

current_path – deploy_to + current_dir的路径(例如/ u / apps / example / current)release_path – releases_path + release_name的路径(例如/ u / apps / example / releases / 20100624000000)

因此,回答您的问题:是的,current_path的确指向最新代码(最新部署)。它在此处通过符号链接指向最新的发行目录。如果您对所有文件夹的含义感兴趣,请查看capistrano结构

与的不同之处release_path在于,它指向您当前正在部署的发行版的路径。如果要在部署过程中引用存储库中的文件(例如运行脚本),这将很有用。

但是,release_path仅在deploy:starting名称空间期间更新,在任何其他时间,它与完全相同current_path。有关更多信息,请参见此github问题

我的具体使用情况是我想要一个运行composer install使用的composer.phar多数民众赞成设在我的回购协议的根源。因此,按照文档进行操作:

SSHKit.config.command_map[:composer] = "#{release_path}/composer.phar"
Run Code Online (Sandbox Code Playgroud)

但这没有用,因为在定义此时间时,它release_path仍指向current_path

我为此找到的解决方法来自以下答案,并且release_path懒惰地进行评估:

SSHKit.config.command_map[:composer] = lambda { "#{release_path}/" + fetch(:src_path) + "/composer.phar" }
Run Code Online (Sandbox Code Playgroud)

因此,只要在deploy:starting命名空间之后访问变量,release_path就可以按照我们的期望进行设置。


anu*_*sha -2

每次使用 Capistrano 部署 Rails 应用程序时,都会创建一个新目录,并在Releases目录中使用较新的版本作为文件名。该目录包含最新的代码。并且current symlink directory将指向最新创建的目录来运行应用程序。

rake、bundle 等任务将在创建单独目录的共享路径目录上运行

rollback我们可以使用如下命令恢复发布

 cap deploy:rollback # capistrano 2
 cap stage_name rollback  #capistrano 3
Run Code Online (Sandbox Code Playgroud)

希望对您有帮助。