在capistrano上的舞台文件上设置应用程序名称

时间:2013-07-23 17:18:44

标签: ruby capistrano

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

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

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

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

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

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

感谢

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

set (:deploy_to)  { "/home/#{user}/applications/#{application}" }

应该是

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

答案 2 :(得分:0)

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

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

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