使用Capistrano 3设置默认阶段

有没有办法在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不会被加载。 这是因为stage的任务是deploy.rb被加载的位置:查看lib/setup.rb ,为每个阶段定义一个任务。 运行时,舞台的任务设置:stage ,加载capistrano默认值,然后最终加载deploy.rb文件。

所以,一个简单的技巧就是告诉Capistrano每次运行上Capfile调用stage任务,将它添加到Capfile而不是你的deploy.rb ):

 Rake::Task[:production].invoke 

或者,使用Capistrano的DSL的invoke方法:

 invoke :production 

如果您确实使用多个阶段,这可能会产生一些意想不到的后果,但如果您只使用production阶段,它应该可以正常工作。

另一个简单的解决方案可能是一个简单的shell别名,例如alias cap='cap production' ,但如果你有多个具有不同阶段名称的项目,它可能不会很好。

在我进入RAILS根目录后,发出命令:

cap development deploy

似乎工作。 之前我在app / models文件夹中发出命令,但是出现了这个错误:

Stage not set, please call something such as cap production deploy, where production is a stage you have defined.

旧解决方案适用于Capistrano 3:

 cap --version #=> Capistrano Version: 3.3.5 (Rake Version: 10.4.2) 

在这些行之后的Capfile的最顶部

 # Load DSL and Setup Up Stages require 'capistrano/setup' 

加:

 set :stage, :production 

然后像往常一样运行任务而不指定阶段:

 cap foo:bar 

capistrano 3.6+的新答案:最好使用invoke :production unless Rake.application.options.show_tasks以避免使用cap -T获得的警告

您可以将以下行添加到deploy.rb,这将阻止Capistrano预期某个阶段:

 set :stages, ["production"]