0

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

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

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

bundle exec不会起作用,因为它似乎是一种资源消耗,而重点bundle package是首先要避免这整个混乱。

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

4

1 回答 1

3

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

如果您在生产环境中安装,并且希望将应用程序限制为来自 的 gem vendor/local,那么您需要执行bundle install --deployment. 这会将 gem 安装到vendor/bundle并设置 Bundler 以使用这些 gem(并且只有那些 gem,而不是系统的 gem)。如果 gem 不在 中vendor/local,它将下载它们。它不会更新您的Gemfile.lock,最佳做法是让您的所有 gem 保持vendor/cache最新,以防止它甚至尝试下载 gem。

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

如果是这种情况,您的选择是跟踪rails您想要的版本的路径并显式运行它,使用bundle exec. 或运行目录bundle install --binstubs --deployment并将其添加到您的. 我没有注意到来自. binPATHbundle exec--binstubs

于 2013-03-22T02:14:32.487 回答