我正在尝试使用multistage/ext版本部署我的应用程序。当每个阶段在不同的服务器上时,它工作得很好。但是对于一个特定的项目,我希望将两个阶段部署到同一服务器上。
为此,我需要在每个服务器上设置不同的应用程序名称。这就是不起作用的地方。
我将application变量移到了stage文件中,并使用延迟加载定义了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'错误
也许我应该考虑部署到不同的服务器,但现在我真的想知道为什么这不起作用。
谢谢
发布于 2013-09-17 00:10:25
您的代码没有任何功能上的错误。正如Lavixu提到的,只要你在部署时指定阶段名称(即cap beta deploy:setup,cap beta deploy),那么应用程序变量就会被识别。
发布于 2017-07-30 09:08:56
set (:deploy_to) { "/home/#{user}/applications/#{application}" }应该是
set :deploy_to, -> { "/home/#{user}/applications/#{application}" }发布于 2018-06-28 00:56:01
我不得不使用fetch来引用其他capistrano变量。即:
set :deploy_to, -> { "/var/deploy/#{fetch(:application)}" }尝试直接访问application时出现undefined local variable or method 'application' for main:Object错误。
https://stackoverflow.com/questions/17816835
复制相似问题