4

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

我正在尝试将以前工作的 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 文档中,它们使用相同的语法来定义“变量”(参见第 5 段“设置deploy.rb 中的共享信息”)?

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

4

1 回答 1

12

我认为 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)}"
于 2014-03-24T16:42:25.143 回答