我在使用 Bundler 安装 Git 依赖项时遇到问题。 bundle install
似乎成功完成:
Using gemname version from git://github.com/username/repo.git (at master)
Your bundle is complete!
但是,运行任何后续命令,bundle exec
等,它会失败:
git://github.com/username/repo.git (at master) is not yet checked out. Run `bundle install` first.
我注意到 Bundler 在获取 gem 时没有问题,但它被安装到本地 /home/rails/.bundler/ruby/2.1.0/
目录中(以及为什么"Ruby 2.1.0"我不知道......),而不是它应该与所有其他 gem 一起/usr/local/rvm/gems/ruby-2.1.3/
的位置。
我尝试清除本地捆绑器缓存和配置并再次运行bundle install
以防那里有一个简单的问题,但这没有帮助。
宝石环境:
- RUBYGEMS VERSION: 2.2.2
- RUBY VERSION: 2.1.3 (2014-09-19 patchlevel 242) [x86_64-linux]
- INSTALLATION DIRECTORY: /usr/local/rvm/gems/ruby-2.1.3
- RUBY EXECUTABLE: /usr/local/rvm/rubies/ruby-2.1.3/bin/ruby
- EXECUTABLE DIRECTORY: /usr/local/rvm/gems/ruby-2.1.3/bin
- SPEC CACHE DIRECTORY: /root/.gem/specs
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /usr/local/rvm/gems/ruby-2.1.3
- /usr/local/rvm/gems/ruby-2.1.3@global
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- https://rubygems.org/
不要运行sudo bundle install
— 这会导致 git gem 安装到错误的位置。
当以无法写入正常 gem 安装位置 ( GEM_HOME
的用户身份运行时,Bundler 希望在 $HOME/.bundler
中找到 git gem。使用 sudo
进行安装会绕过此行为(因为您可以以 root 身份写入任何位置),并且要求您也以 root 身份bundle exec
。
而是在没有 sudo 的情况下运行bundle install
,作为将运行bundle exec
的同一用户。
如果需要根权限才能安装其他 gem,Bundler 会在内部调用 sudo。有关详细信息,请参阅 http://bundler.io/man/bundle-install.1.html#SUDO-USAGE。
使用 --deployment
标志可避免此问题,因为在部署模式下,所有 gem(源自 git 的和其他)都安装到项目中的 vendor/bundle
目录中。