看来,当我运行bundle package
然后bundle install --local
然后我运行unicorn_rails
,独角兽仍然访问系统宝石。我不断收到:得到独角兽只能访问供应商/缓存宝石
您已启动机架1.5.2,但您的Gemfile需要机架 1.2.8。使用bundle exec可以解决这个问题。
而且它不应该因为rack 1.2.8在供应商/缓存中。
bundle exec
不会工作,因为它似乎是一个资源猪,整个bundle package
点是避免这一整个混乱首先。
那么如何让独角兽获得捆绑环境才能使用供应商/缓存宝石?
后续注意事项:在这种情况下,'rails'不再是一个问题,因为它现在只运行'script/rails'(如果存在的话),这将是Bundle范围的。有关二进制路径的其他一切仍然适用于其他宝石('rspec'是一个值得注意的宝石)。如果您正在运行'unicorn'或'foreman'或'guard'或'spork'或任何其他Ruby gem二进制文件,则需要解决路径问题。 – 2013-03-23 02:47:51
感谢@Jimmy Stewart!我真的想把我所有的宝石保存在我的仓库中。我有另一个Rails应用程序运行(Redmine),似乎冲突总是在发生。此外,我不想依赖rubygems.org总是在那里或总是可用,并在某些情况下github宝石。捆绑安装--binstubs - 部署或捆绑安装 - 部署是制作“自包含”应用程序的最佳方式?如果是这样,那么如果gem现在在vendor/bundle中,那么cache目录的目的是什么? – Jon 2013-03-23 14:13:22
'bundle install --binstubs --local --deployment'就是你想要的。在你的项目中创建binstubs,防止下载宝石,将宝石安装到'vendor/bundle'中,并且只使用那些宝石。 'vendor/cache'目录包含Gem_source code_('.gem'文件)。'vendor/bundle'目录中充满了解压缩,编译好的(如果需要的话),随时可用的gem。这就是'require'最终会在您的应用运行时加载它们的地方。 – 2013-03-23 17:43:16