有没有办法在 Capistrano 3 中设置默认阶段?
我试过将 set :stage, :production
放在 deploy.rb 中,但这没有用,它给出了错误:
Stage not set, please call something such as `cap production deploy`,
where production is a stage you have defined
我现在只有一个阶段,所以我希望能够只运行 cap deploy
并让它在默认情况下执行。
最佳答案
Capistrano v3 在某种程度上是 Rake 的包装器,因此您需要意识到真正发生的是 production
任务首先运行,然后是 deploy
任务。
如果你稍微调试一下,你会发现当你不输入一个阶段时,deploy.rb
不会被加载。这是因为阶段的任务是加载 deploy.rb
的地方: 查看 lib/setup.rb
,为每个阶段定义一个任务。运行时,阶段的任务设置 :stage
,加载 capistrano 默认值,然后最终加载您的 deploy.rb
文件。
因此,一个简单的技巧是告诉 Capistrano 在每次运行 cap
时调用阶段任务,方法是将其添加到 Capfile
的末尾(不是你的deploy.rb
):
Rake::Task[:production].invoke
或者,使用 Capistrano 的 DSL 中的 invoke
方法:
invoke :production
如果您确实使用多个阶段,这可能会产生一些意想不到的后果,但如果您只使用 production
阶段,它应该可以正常工作。
另一个简单的解决方案可能是一个简单的 shell 别名,例如 alias cap='cap production'
,但如果您有多个具有不同阶段名称的项目,它可能效果不佳。
关于ruby-on-rails - 使用 Capistrano 3 设置默认阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21006875/