【问题标题】:Set custom variable in capistrano 3在 capistrano 3 中设置自定义变量
【发布时间】:2013-11-06 10:09:31
【问题描述】:

我在我的 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​​ 不太熟悉,所以我不知道如何正确地做到这一点。

【问题讨论】:

    标签: capistrano


    【解决方案1】:

    代码应为:

    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() 构造。

    【讨论】:

    • 谢谢!我知道 cap3 中的命令执行发生了怎样的变化,并且我已经更新了我的代码。但是在 capistrano 网站上没有关于 'fetch' 方法的信息(我想我看了很多遍,不可能错过它)。
    • 重点是set()fetch()是内部API。将它们用于 any 变量的原因在 v3 中不存在,因此除非您真的需要延迟评估,否则您应该只使用常规变量。
    【解决方案2】:

    现在可以通过 'fetch' 来实现:

    fetch(:app_environment)
    

    【讨论】:

      猜你喜欢
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多