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