使用Capistrano 3设置默认阶段

Bra*_*yer 27 ruby capistrano ruby-on-rails

有没有办法在Capistrano 3中设置默认阶段?

我已经尝试放入set :stage, :productiondeploy.rb,但这不起作用,它给出了错误:

Stage not set, please call something such as `cap production deploy`,
where production is a stage you have defined
Run Code Online (Sandbox Code Playgroud)

我现在只有一个阶段所以我希望能够运行cap deploy并让它在默认情况下执行.

Dyl*_*kow 32

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
Run Code Online (Sandbox Code Playgroud)

或者,使用invokeCapistrano的DSL方法:

invoke :production
Run Code Online (Sandbox Code Playgroud)

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

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


小智 5

在我cd进入 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.