19

我在我的 php 项目中使用 capistrano 2,我曾经在其中定义自定义变量,如下所示:

set :app_environment, "test"

然后我在部署任务中访问它,例如:

run "echo '#{app_environment}' > #{releases_path}/#{release_name}/protected/config/mode.php"

现在在 capistrano 3 中,我在特定于阶段的配置文件中定义了这个变量。但我没有在我的任务中定义它们:

undefined local variable or method `app_environment' for #<SSHKit::Backend::Netssh:0x007f92323d6988> config/deploy.rb:28:in `block (3 levels) in <top (required)>'

不幸的是,关于最新版本的 capistrano 的文档并不多,而且我对 ruby​​ 不太熟悉,所以我不知道如何正确地做到这一点。

4

2 回答 2

28

代码应为:

run "echo '#{fetch(:app_environment)}' > #{releases_path}/#{fetch(:release_name)}/protected/config/mode.php"

虽然即使这样也不正确,因为run()Cap3 中不存在,但现在是execute(),所以:

execute "echo '#{fetch(:app_environment)}' > #{releases_path}/#{fetch(:release_name)}/protected/config/mode.php"

当心像这样构造你的命令,什么都不会使用命令映射,或者尊重within()as()with()构造。

于 2013-11-06T10:45:30.927 回答
18

这现在是通过“获取”实现的:

fetch(:app_environment)
于 2013-11-06T10:45:37.040 回答