【问题标题】:deploy.rb: undefined local variable or method `home` for main:Objectdeploy.rb: main:Object 的未定义局部变量或方法`home`
【发布时间】:2014-03-24 16:01:36
【问题描述】:

我知道有很多关于此错误消息的问题,但我找不到在与我相同的上下文中发生此错误的问题。

我正在尝试将以前工作的 Capistrano 配置从版本 2 迁移到 Capistrano 3。不幸的是,调用 cap production deploy --dry-run 会产生错误

cap aborted!
undefined local variable or method `home' for main:Object
/myapp/config/deploy.rb:6:in `<top (required)>'

这是出现错误的deploy.rb 直到第 6 行的内容:

set :user, "myuser"
set :application, "myapp"
set :domain, "mydomain"
set :repository, "git@github.com:acme/myapp.git"
set :home, "/home/myuser"
set :deploy_to, "#{home}/#{domain}"

我对 Ruby 了解不多,但根据我收集到的信息,冒号表示这些是符号,而不是变量,并且在 Capistrano documentation 中,它们使用相同的语法来定义“变量”(参见第5段“在deploy.rb中设置共享信息”)?

部署脚本在装有 Ruby 2.0.0p247 和 Capistrano 2.9.0 的 OS X 上完美运行。现在在使用 Ruby 1.9.3p545 和 Capistrano 3.1.0 的 CentOS 上,出现上述错误。我对 Capfile 进行了几处更改以使其与 Capistrano 3 一起运行,但保持 deploy.rb 不变,希望它能正常工作。

【问题讨论】:

    标签: ruby capistrano3


    【解决方案1】:

    我认为 Capistrano 不会为您创建局部变量,但您可以自己创建:

    domain = "mydomain"
    home = "/home/myuser"
    
    set :domain, domain
    set :home, home
    set :deploy_to, "#{home}/#{domain}"
    

    或者,您可以使用fetch,对应于set

    set :domain, "mydomain"
    set :home, "/home/myuser"
    set :deploy_to, "#{fetch(:home)}/#{fetch(:domain)}"
    

    【讨论】:

    猜你喜欢
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 2014-04-21
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多