什么是 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。
我是 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。