为什么 ruby(在 Travis CI 中)找不到我的 bundle installed gem?

Why can't ruby (in Travis CI) find my bundle installed gems?

我正在尝试设置 Travis CI,但 ruby 没有按我预期的方式工作。

看起来 Travis CI 是正确的 运行 我的包安装,但是 ruby 之后无法立即找到 ruby gem。这是 Travis 日志:

$ ruby --version
ruby 2.0.0p481 (2014-05-08 revision 45883) [x86_64-darwin13.1.0]
$ rvm --version
rvm 1.25.33 (stable) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]
$ bundle --version
Bundler version 1.7.4

[... snip ...]


$ bundle install --jobs=3 --retry=3 --deployment
Fetching gem metadata from https://rubygems.org/.........
Fetching additional metadata from https://rubygems.org/..
Installing colorize 0.7.2
Installing json 1.8.1
Using bundler 1.7.4
Installing dnssd 2.0
Your bundle is complete!
It was installed into ./vendor/bundle
$ cat Gemfile.lock
GEM
  remote: https://rubygems.org/
  specs:
    colorize (0.7.2)
    dnssd (2.0)
    json (1.8.1)
PLATFORMS
  ruby
DEPENDENCIES
  colorize
  dnssd
  json
The command "cat Gemfile.lock" exited with 0.
$ ruby -e "require 'colorize'"
/Users/travis/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- colorize (LoadError)
    from /Users/travis/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from -e:1:in `<main>'
The command "ruby -e "require 'colorize'"" exited with 1.
Done. Your build exited with 1.

.travis.yml 文件现在很简单:

language: objective-c
script:
  - cat Gemfile.lock
  - bundle env
  - ruby -e "require 'colorize'"

我假设我犯了一个简单的错误(可能是一个纯粹的 ruby 错误)但我看不到它。我在这里做错了什么?

Bundler 不会让东西神奇地可用;您需要在脚本中 require 'bundler/setup' 让 Bundler 设置您的加载路径。

Bundler 会将您的 gem 安装到您想要的任何路径,但这些 gem 不一定会在您的 Ruby 加载路径中,因此 require 不一定会找到它们。在使用任何其他 gem 之前,您可以让 Bundler 通过 require 'bundler/setup' 改变您的加载路径以指向您安装的 bundle 的 gem。这确实需要 bundler 已经在您的加载路径中可用,这通常是通过 gem install bundler 完成的。 Travis 预装了它,因此您无需做任何特殊操作即可使用它。