【问题标题】:In Capistrano, both stages load when I specify a non-default stage在 Capistrano 中,当我指定非默认阶段时,两个阶段都会加载
【发布时间】:2013-06-16 01:59:03
【问题描述】:

我有一个简短的多阶段 capistrano 脚本,它指定了一个默认阶段 (set :default_stage, :staging),但我发现当我在命令行上指定另一个阶段 (例如 cap production deploy) 时,暂存和生产任务都会运行:

$ cap production deploy
    triggering load callbacks
  * 2013-06-19 06:38:34 executing `staging'
  * 2013-06-19 06:38:34 executing `production'

因此,部署过程会在 staging.rb 指定的位置查找 scm,该位置是本地存储库 - 因此生产服务器不存在它,因此我的部署失败。

我可以在我的部署脚本中提供一个默认阶段,但当我在命令行上指定另一个阶段时不加载它吗?


您可以在此处查看我的部署文件:

部署.rb

set :stages, [:staging, :production]
set :default_stage, :staging
require 'capistrano/ext/multistage'

set :repository,  "myrepo"
set :scm, :git
set :scm_user, "deploy"

set :user, "deploy"
set (:deploy_to) {"/var/www/clu2/#{application}/"}
set :use_sudo, false
default_run_options[:pty] = true

生产.rb

set :application, "production"
set :rails_env, 'production'
set :deploy_to, "/var/www/myapp/"
set :branch, 'develop'

role :app, 'trustedquote.com'
role :web, 'trustedquote.com'
role :db, 'trustedquote.com', :primary => true

staging.rb

set :application, "staging"
set :rails_env, 'production'
set :repository,  "file:///git/myrepo.git"
set :local_repository, "file://."

set :branch, 'develop'

role :app, 'mylocation'
role :web, 'mylocation'
role :db, 'mylocation', :primary => true

【问题讨论】:

  • 回答你原来的问题,是的,你可以。您上面的示例看起来与github.com/capistrano/capistrano/wiki/2.x-Multistage-Extension 有点不同...
  • 哇。我所做的改变是使用字符串而不是符号来指定我的阶段,这似乎产生了我需要的差异。谢谢,@CDub。
  • 嘘!没问题 - 很高兴为您提供帮助!有趣的是,他们并非无动于衷......任何人,不要忘记回答你自己的问题。 :)

标签: capistrano


【解决方案1】:

感谢@CDub 的意见。

我将 deploy.rb 中的阶段名称从符号更改为字符串,结果有所不同:

set :stages, %w[staging production]
set :default_stage, 'staging'

【讨论】:

    猜你喜欢
    • 2013-10-23
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 2014-11-17
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    相关资源
    最近更新 更多