什么是Capistrano binstubs?

时间:2016-03-04 20:59:52

标签: ruby-on-rails-4 capistrano capistrano3

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

1 个答案:

答案 0 :(得分:2)

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

binstubs有时是必要的,因为给定的命名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并且您不必担心创建自己的binstubs。