4

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

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

我将application变量移动到阶段文件并deploy_to使用延迟加载定义变量。

配置/部署.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}" }

配置/部署/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'错误

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

谢谢

4

3 回答 3

0

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

于 2013-09-16T16:10:24.807 回答
0
set (:deploy_to)  { "/home/#{user}/applications/#{application}" }

应该

set :deploy_to, -> { "/home/#{user}/applications/#{application}" }
于 2017-07-30T01:08:56.140 回答
0

我不得不使用fetch引用其他 capistrano 变量。IE:

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

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

于 2018-06-27T16:56:01.380 回答