什么是 Capistrano binstub?

What are Capistrano binstubs?

我是 Rails 的新手,希望使用 Capistrano 将我的应用程序部署到 Ubuntu 14。有人可以向我解释什么是 binstubs 以及部署我的 rails 应用程序是否需要它们吗?

binstub 是一个可执行脚本,它包装了 Ruby 命令以确保使用该命令的特定版本。

有时需要 binstub 的原因是因为给定的命名 Ruby 命令可以指代许多不同的东西,因此您不能 100% 确定名称指的是什么。在部署中,可预测性非常重要:您希望 100% 确定自己正在编写什么代码 运行,尤其是在生产环境中。

例如,考虑名为 rails 的命令。您可能安装了多个版本的 Rails。实际上,每次您升级到最新的安全修复补丁版本时,这就是您正在安装的另一个新版本。除此之外,您可能还安装了多个版本的 Ruby。

那么当你运行命令rails时,使用的是哪个版本的Ruby? Rails 是哪个版本?

binstub 使这个决定明确。这个想法是您创建一个特殊的脚本并将其放在项目的 bin 目录中,比如 bin/rails。此脚本使用 Bundler 来保证使用 Rails 的正确版本。当你 运行 bin/rails 时,你就得到了保证。 (当您生成一个新的 Rails 项目时,Rails 实际上会为您创建这个和其他 binstub。)

无论如何,从技术上讲,只要您使用 bundle exec rails,就不需要这些 binstub。 bundle exec 包装器本质上与 binstub 做的事情相同。

如果您将 capistrano/rails gem 与 capistrano/bundler gem 结合使用(确保两者都在您的 Capfile 中),那么 Capistrano 将始终使用 bundle exec 而且您不必担心创建自己的 binstub。