【问题标题】:Set application name on stage files on capistrano在 capistrano 上的舞台文件上设置应用程序名称
【发布时间】:2013-07-23 17:18:44
【问题描述】:

我正在尝试使用 multistage/ext 扩展部署我的应用程序。当每个阶段位于不同的服务器中时,它工作正常。但是对于一个特定的项目,我想将两个阶段部署到同一台服务器。

为此,我需要在每台服务器上设置不同的应用程序名称。那是行不通的。

我将application 变量移到了暂存文件中,并使用延迟加载定义了deploy_to 变量。

config/deploy.rb

set :stages, %w(production beta)
set :default_stage, "beta"
require 'capistrano/ext/multistage'

#set :application, "myapp-beta"
set :user,        "deploy"
set (:deploy_to)  { "/home/#{user}/applications/#{application}" }

config/deploy/beta.rb

server "my.server.com", :web, :app, :db, primary: true

set :application,  "myapp-beta"
set :domains,      "beta.myapp.com"
set :branch,       "beta"   

我收到Please specify the name of your application, set :application, 'foo' 错误

也许我应该考虑部署到不同的服务器,但现在我真的很想了解为什么这不起作用。

谢谢

【问题讨论】:

  • 您在部署生产吗?你有 :application 设置吗?
  • 我尝试并重现了确切的错误。这是因为您的变量应用程序未设置。因此,我假设您没有调用 cap beta deploy:setup。相反,您必须调用 cap deploy:setup 或其他一些通用任务,而不指定定义应用程序变量的环境。

标签: ruby capistrano


【解决方案1】:

您的代码在功能上没有任何问题。正如Lavixu所说,只要你在部署时指定阶段名称(即cap beta deploy:setup,cap beta deploy),那么应用程序变量就会被识别。

【讨论】:

    【解决方案2】:
    set (:deploy_to)  { "/home/#{user}/applications/#{application}" }
    

    应该是

    set :deploy_to, -> { "/home/#{user}/applications/#{application}" }
    

    【讨论】:

      【解决方案3】:

      我必须使用 fetch 来引用其他 capistrano 变量。即:

      set :deploy_to, -> { "/var/deploy/#{fetch(:application)}" }
      

      试图直接访问application 引发了undefined local variable or method 'application' for main:Object 错误。

      【讨论】:

        猜你喜欢
        • 2013-12-04
        • 2011-12-10
        • 2020-10-13
        • 2012-04-21
        • 1970-01-01
        • 2020-07-29
        • 2018-12-17
        • 1970-01-01
        • 2014-06-09
        相关资源
        最近更新 更多