让Unicorn只访问供应商/缓存宝石

时间:2013-03-22 01:48:20

标签: ruby-on-rails bundler unicorn

似乎当我运行bundle package然后bundle install --local然后我运行unicorn_rails时,独角兽仍在访问系统宝石。我一直在说:

  

您已经激活了机架1.5.2,但您的Gemfile需要机架   1.2.8。使用bundle exec可以解决这个问题。

它不应该因为机架1.2.8在供应商/缓存中。

bundle exec不会工作,因为它似乎是一种资源匮乏,bundle package的重点在于首先避免这种混乱。

那么我如何让独角兽获得捆绑环境以仅使用供应商/缓存宝石?

1 个答案:

答案 0 :(得分:3)

bundle install --local获取vendor/local中的gem,并使用您的默认gem命令安装它们。默认情况下,这是系统范围的安装。如果你正在使用RVM或其他东西,它将在你当前的RVM gemset中。

如果您正在制作中进行安装,并且希望将应用限制在vendor/local的宝石中,则需要执行bundle install --deployment。这会将宝石安装到vendor/bundle并将Bundler设置为使用这些宝石(只有那些宝石,而不是系统宝石)。如果宝石不在vendor/local中,它将下载它们。它不会更新您的Gemfile.lock,最佳做法是让您的所有宝石保持最新状态,以防止它甚至尝试下载宝石。

除非您从其中一个宝石运行二进制文件,否则不需要使用vendor/cache。如果您正在运行bundle exec并遇到此问题,原因是rails server命令正在从shell的rails运行。它可能是Rails的不同版本,而不是你想要使用的版本。

如果是这种情况,您可以选择跟踪所需版本$PATH的路径并明确运行,使用rails,或运行bundle exec并添加 bundle install --binstubs --deployment目录到bin。我没有注意到来自PATH的任何开销,但是如果您对此感到担忧并且仍然希望将所有内容都限定在您的包中,那么请使用bundle exec(这就是Heroku如何做到的,顺便说一下)。