【问题标题】:Get path to capistrano shared path from ruby从 ruby​​ 获取 capistrano 共享路径的路径
【发布时间】:2015-05-07 23:22:15
【问题描述】:

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

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

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

/var/www/app-name/shared/

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

【问题讨论】:

    标签: ruby ruby-on-rails-4 capistrano capistrano3


    【解决方案1】:

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

    linked_dirs 变量定义了这个:

    set :linked_dirs, %w[ example ]
    

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

    更新:

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

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

    【讨论】:

    • 感谢您的回答!我的问题的目的是通过 ruby​​ 将共享路径传递给另一个程序。我已经正确设置了:linked_dirs,并且我正在正确使用它,但我想发送绝对路径,因为在几次更新后simlink 会消失。我在想会有一个我可以使用的变量/函数,但也许我必须手动将相对路径转换为绝对路径?
    • 链接目录不会消失,在这种情况下你可以随时引用current/example。如果您偏执,这并不总是一件坏事,您可以根据需要将此链接扩展到完整路径。即使部署一百次也不会消失。
    • 抱歉,我说错了。链接目录不会消失,但它的 simlink 会消失。扩展到完整路径可能是要走的路,如果您更新答案以包含它,我会将其设为可接受的答案。
    【解决方案2】:

    您可以简单地使用全局 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 {...}callback)。

    【讨论】:

    • 在 ruby​​ 控制台中输入 puts "#{shared_path}" 会给我 NameError: undefined local variable or method shared_pa​​th' for main:Object`。你能从你的 ruby​​ 控制台运行它吗?
    • @RickSmith 是的,你说得对,在经典控制台 rails console 中它们没有定义,它们仅在某些条件下可用(请参阅更新的答案)。您可以使用一个必须拥有的示例(在我看来 ;))进行检查:github.com/pry/pry 并在那里查看
    猜你喜欢
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 2012-09-17
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多