使用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"]