Ruby script cannot locate required gem

2019-07-04 21:40发布

问题:

I'm trying to run a Ruby script that has worked fine in the past. I need to use the Mechanize gem, so at the top of the script, it says require 'mechanize'. However, when I try to run the script now, the Terminal output reads:

/Users/codebiker/.rvm/rubies/ruby-2.1.0/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- mechanize (LoadError)
from /Users/codebiker/.rvm/rubies/ruby-2.1.0/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from myscript.rb:2:in `<main>'

When I run gem env, as suggested here, I get:

RubyGems Environment:
  - RUBYGEMS VERSION: 2.2.1
  - RUBY VERSION: 2.1.0 (2013-12-25 patchlevel 0) [x86_64-darwin13.0]
  - INSTALLATION DIRECTORY: /Users/codebiker/.rvm/gems/ruby-2.1.0
  - RUBY EXECUTABLE: /Users/codebiker/.rvm/rubies/ruby-2.1.0/bin/ruby
  - EXECUTABLE DIRECTORY: /Users/codebiker/.rvm/gems/ruby-2.1.0/bin
  - SPEC CACHE DIRECTORY: /Users/codebiker/.gem/specs
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-darwin-13
  - GEM PATHS:
     - /Users/codebiker/.rvm/gems/ruby-2.1.0
     - /Users/codebiker/.rvm/gems/ruby-2.1.0@global
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
     - :benchmark => false
     - :sources => ["http://rubygems.org/", "http://gemcutter.org"]
     - "install" => "--no-rdoc --no-ri"
     - "update" => "--no-rdoc --no-ri"
  - REMOTE SOURCES:
     - http://rubygems.org/
     - http://gemcutter.org
  - SHELL PATH:
     - /Users/codebiker/.rvm/gems/ruby-2.1.0/bin
     - /Users/codebiker/.rvm/gems/ruby-2.1.0@global/bin
     - /Users/codebiker/.rvm/rubies/ruby-2.1.0/bin
     - /usr/local/bin
     - /usr/bin
     - /bin
     - /usr/sbin
     - /sbin
     - /usr/local/bin
     - /opt/X11/bin
     - /usr/texbin
     - /Users/codebiker/.rvm/bin

When I run rvm get head, I get:

Upgrading the RVM installation in /Users/codebiker/.rvm/
RVM PATH line found in /Users/codebiker/.bashrc /Users/codebiker/.zshrc.
RVM sourcing line found in /Users/codebiker/.bash_profile /Users/codebiker/.zprofile.
Upgrade of RVM in /Users/codebiker/.rvm/ is complete.

When I run which ruby, I get:

/Users/codebiker/.rvm/rubies/ruby-2.1.0/bin/ruby

And ruby -v gives me:

ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin13.0]

Any advice, thoughts, or tips would be appreciated! I have no idea what's wrong here.

回答1:

Gems must first be installed before you can require them in a script. To install a gem; first open a terminal window and then type:

gem install GEM-NAME or in your case: gem install mechanize



回答2:

If you use bundler, add into your gemfile link to mechanize gem:

gem 'mechanize'

Then issue bundle installation for yourrails or other project folder:

$ bundle install

Make sure that mechanize gem is present in the gemfile.lock after the bundle installation.

Then even in case if you don't use bundler, make sure that bundle founds the gem:

$ bundle show mechanize
/path/to/mechanize/gem

Then if your app isn't the rails app, just run your app with:

$ bundle exec ./your_app