我正在尝试使用多级/ ext扩展来部署我的应用程序。当每个阶段在不同的服务器中时,它工作正常。但对于一个特定的项目,我想将两个阶段部署到同一台服务器上。
为此,我需要在每台服务器上设置不同的应用程序名称。那就是不起作用。
我将application
变量移动到舞台文件,并使用延迟加载定义deploy_to
变量。
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}" }
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'
错误
也许我应该考虑部署到不同的服务器,但现在我真的想了解为什么这不起作用。
感谢
答案 0 :(得分:0)
您的代码没有任何功能上的错误。正如Lavixu所提到的,只要您在部署时指定阶段名称(即cap beta deploy:setup
,cap 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
错误。