ruby-on-rails - 使用 Capistrano 3 设置默认阶段

标签 ruby-on-rails ruby capistrano

有没有办法在 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/

相关文章:

ruby-on-rails - “标记为不当”通知系统 - 是否有适用于 Rails 的 gem 或插件?

ruby-on-rails - 权限被拒绝@dir_s_mkdir (Errno::EACCES) - 在应用程序运行时

html - 我如何将每个换行符转换/替换为 '<br/>'?

javascript - Rails 通过 HTML 数据标签将变量从 View 传递到 Javascript 文件

ruby - 如何在启用环境和警告的情况下运行 Ruby 脚本?

ruby - 如何在 irb 控制台中使用 open() 从 .txt 文件中打印出基本文本? # ruby

ruby-on-rails - Capistrano 和 Assets :precompile not working due to rake versioning issue

用于对两个字段进行排序的 Ruby 习惯用法

ruby-on-rails - Rails 5 部署到 VPS - capistrano 错误 "Don' 不知道如何构建任务 'deploy:setup' "

ruby-on-rails - Capistrano gzip : stdin: unexpected end of file interruption