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

从ruby获取capistrano共享路径的路径,ruby,ruby-on-rails-4,capistrano,capistrano3,Ruby,Ruby On Rails 4,Capistrano,Capistrano3,我知道我可以通过rails.root获取rails应用程序的位置: > Rails.root => #<Pathname:/var/www/app-name/releases/20150507181426> 我需要能够从ruby代码中获取路径。提前感谢。您真的不需要知道Capistrano的共享路径是什么。在部署过程中,您将创建指向部署之间共享的任何目录的链接 linked_dirs变量定义了以下内容: set :linked_dirs, %w[ example ]

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

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

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

您真的不需要知道Capistrano的共享路径是什么。在部署过程中,您将创建指向部署之间共享的任何目录的链接

linked_dirs
变量定义了以下内容:

set :linked_dirs, %w[ example ]
如果设置,则在部署期间
发布/NNN/example
将链接到
共享/example
。您可以根据需要添加或更改此列表

更新:

如果您担心在应用后续部署时会删除此符号链接,那么在执行此操作之前,通过使用它的任何进程将此链接扩展到完整路径都是值得的


遵循这些链接是到达正确目的地的最可靠方式。

您只需使用全局capistrano变量
共享路径即可(适用于capistrano v2和v3)

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

puts "#{shared_path}"
=> /DEPLOY_PATH/APP_NAME/shared
可以找到一系列可能有用的全局变量,我想它们中的大多数在CapistranoV3中也能很好地工作


更新


请注意,它们中的大多数仅在capistrano libs(
deploy.rb
或自定义阶段:
development.rb
staging.rb
production.rb
,…)下可用,或者在capistrano rake任务中可用(例如使用
on角色(:app)do{…}
回调时)。

感谢您的回答!我的问题的目的是通过ruby将共享路径传递给另一个程序。我已经正确地设置了
:linked\u dirs
并且我正在正确地使用它,但是我想发送绝对路径,因为simlink会在几次更新后消失。我想我可以使用一个变量/函数,但也许我必须手动将相对路径转换为绝对路径?链接目录不会消失,在这种情况下,您可以始终引用
current/example
。如果你是偏执狂,这并不总是一件坏事,你可以根据需要将此链接扩展到完整路径。即使你部署了一百次,它也不会消失。对不起,我说错了。链接目录不会消失,但指向它的simlink会消失。扩展到完整路径可能是一种方法,如果您更新您的答案以包含该路径,我将使其成为可接受的答案。键入
将“#{shared_path}”
放入ruby控制台,为main:Object`提供
NameError:未定义的局部变量或方法
shared_path'。你能从你的ruby控制台上运行这个吗?@RickSmith是的,你是对的,在一个经典的控制台
rails控制台
中,它们没有定义,只有在某些条件下才可用(见更新的答案)。在我看来,你可以用一个必须拥有的(gem)示例来检查那里
puts "#{shared_path}"
=> /DEPLOY_PATH/APP_NAME/shared