从 ruby 获取 Capistrano 共享路径的路径

Get path to capistrano shared path from ruby

我知道我可以通过 Rails.root 获取我的 rails 应用程序的位置:

> Rails.root
 => #<Pathname:/var/www/app-name/releases/20150507181426>

我正在寻找调用以获取 capistrano 的共享文件夹的函数,在本例中可在此处找到:

/var/www/app-name/shared/

我需要能够从 ruby 代码中获取路径。提前致谢。

你真的不需要知道 Capistrano 的共享路径是什么。在部署过程中,您应该为部署之间共享的任何目录创建 link。

linked_dirs 变量定义如下:

set :linked_dirs, %w[ example ]

如果设置,在部署期间 releases/NNN/example 将被 link 编辑为 shared/example。您可以根据需要添加或更改此列表。

更新:

如果您担心此 symlink 在应用后续部署时被删除,则值得在执行之前通过任何使用它的进程将此 link 扩展到完整路径。

遵循这些 link 是到达正确目的地的最可靠方法。

您可以简单地使用全局 capistrano 变量 shared_path(适用于 capistrano v2 和 v3)。

它为您提供共享内容的基本路径:

puts "#{shared_path}"
=> /DEPLOY_PATH/APP_NAME/shared

可以找到可能有用的全局变量列表 here,我想它们中的大多数在 capistrano v3 中也能很好地工作。


更新

请注意,其中大部分仅在 capistrano 库下可用(deploy.rb 或自定义阶段:development.rbstaging.rbproduction.rb、... ) 或在 capistrano rake 任务中(例如使用 on role(:app) do {...} 回调时)。