How to access 'zip' gem (or 'rubyzip') in Ruby? - ruby

I must be missing something totally obvious but I can't seem to get the 'zip' gem to work. I've installed it with rubygems just like I've done with many other gems. Rubygem says it's there but yet when I try to require it, Ruby says it's not there. I'm experiencing the same problem on both Windows and Linux. Here's a Linux session (extra output removed for brevity):
~$ ruby -v
ruby 1.8.7 (2011-02-18 patchlevel 334) [x86_64-linux]
~$ gem list z
~$ sudo gem install zip
Successfully installed zip-2.0.2
~$ irb
irb(main):001:0> require 'zip/zip'
LoadError: no such file to load -- zip/zip
from (irb):1:in `require'
from (irb):1
from :0
And a Windows session:
C:\> ruby -v
ruby 1.8.7 (2011-02-18 patchlevel 334) [i386-mingw32]
C:\> gem list z
C:\> gem install zip
Successfully installed zip-2.0.2
C:\> irb
irb(main):001:0> require 'zip/zip'
LoadError: no such file to load -- zip/zip
from (irb):1:in `require'
from (irb):1
I'm thinking perhaps there's some underlying dependency that 'zip' needs but I haven't found anything about that in the docs.
I've also had the same lack of success with 'rubyzip' It seems that perhaps 'zip' and 'rubyzip' are forks?
Any ideas? Or if there's a better gem out there for archiving, I'd love to hear about it. The choice of zip archiving gems is confusing. The gem 'Zippy' looks good but it requires 'zip' so I'm still stuck.

Try this.
gem install rubyzip2
then
irb> require 'rubygems'
#=> true
irb> require 'zip/zip'
#=> true
# you can also require 'zip/zipfilesystem'

With rubyzip 1.1.0 the correct require is
require 'zip'
As per the docs at http://rubydoc.info/gems/rubyzip/1.1.0

Related

Ruby Gem adaptor MySQL error

I am getting the below error while using the MySQL gem; Tried mysql2 and it also gives the same error.
-bash-4.1$ gem list
*** LOCAL GEMS ***
mysql (2.9.1)
-bash-4.1$ ruby -v
ruby 1.8.7 (2013-06-27 patchlevel 374) [x86_64-linux]
-bash-4.1$ irb
irb(main):001:0> require 'mysql'
NameError: uninitialized constant Mysql
from ./mysql.rb:10
from (irb):1:in `require'
from (irb):1
from :0
irb(main):002:0>
Please let me know if there is a solution for this; thanks!
Are you using bundler/rvm? If so, start irb with:
bundle exec irb
make sure you are in the right gemset and ruby version from where you are accessing the gem.
Before typing in the irb, check what gemset you are in:
rvm gemset list
then check the gems installed in that particular gemset
rvm <my-gemset-name> do gem list
If they do not match, that is your problem and you can fix it by changing to the right gemset:
rvm use <my-gemset>
Similarly, check for ruby version, i.e if the ruby version for your installed gem and from where you are running your irb match

require not working with rspec

Here is my file, test.rb:
require 'rubygems'
require 'pry'
There is no problem running it with ruby:
$ ruby test.rb
However, there is an error with rspec:
$ rspec test.rb
/path/to/test.rb:2:in `require': no such file to load -- pry (LoadError)
Versions:
$ ruby -v
ruby 1.8.7 (2013-06-27 patchlevel 374) [i686-darwin12.5.0]
$ rspec -v
3.0.4
$ gem -v
2.0.14
$ gem list pry
*** LOCAL GEMS ***
pry (0.9.12.6)
Found the issue.
rspec was installed using bundle install.
pry was installed using gem install.
I went back and installed pry using bundle install and now rspec runs without error.
I cannot however explain why exactly the failure occurs. Anyone?
Bundler is probably storing/looking for gems in a different location than gem install. Unless you have a extremely good reason to, it's better to always use bundler and the Gemfile.
Oh, I also strongly recommend you to install a newer version of Ruby. That should be pretty simple using RVM.

Can' include gem in my code

I don't get why my script can't find the gem that I just installed. Here is the code of main.rb
require 'exifr'
At this point I get
LoadError: no such file to load — exifr
error message
Here is the output of
gem environment
GEM PATHS:
- /Users/me/.rvm/gems/ruby-1.9.3-p194
When I do
ls /Users/me/.rvm/gems/ruby-1.9.3-p194/gems/exifr-1.1.3/bin/exifr
I get
/Users/me/.rvm/gems/ruby-1.9.3-p194/gems/exifr-1.1.3/bin/exifr
So the gem is in that location.
I'm running Mac OS Lion.
What I do wrong ?
//EDIT
gem list exifr
*** LOCAL GEMS ***
exifr (1.1.3)
1.9.3-p194 :001 > require 'exifr'
=> true
when running ruby 1.9 you do not have to require rubygems anymore, so this should not be an issue.
looking at the bin directory is not of any use, cause the gems usually live in lib.
if you do a gem list exifr your installed gem should print out like
*** LOCAL GEMS ***
exifr (1.1.3)
the next step would be to try it out via the ruby REPL
$ irb
1.9.3p125 :001 > require "exifr"
=> true
1.9.3p125 :002 > exit
this indicates that everything is installed fine.

rvm, irb and require - not working for installed gems under irb

I have just installed rvm today and it looks really handy/powerful.
I think I am getting the hang of it, but...
When using an rvm installed ruby, and running irb, when I require an installed gem, something, like 'rvm', I get:
> kimptoc$ rvm use 1.8.7
Using /Users/kimptoc/.rvm/gems/ruby-1.8.7-p302
> kimptoc$ gem list
*** LOCAL GEMS ***
abstract (1.0.0)
...
rvm (1.0.11)
...
> kimptoc$ irb
ruby-1.8.7-p302 > require 'rvm'
LoadError: no such file to load -- rvm
from (irb):1:in `require'
from (irb):1
But when using the "system" ruby, it works fine.
Historically I have been using sudo gem install ... and so the "system" gems are generally installed that way. Could that be my problem? Do I need to uninstall these to fix things?
I am running OSX 10.6.4. "system" is the default OSX ruby, 1.8.7 (p174)
Try require 'rubygems' first.
> rvm use 1.8.7
> rvm info
(Find the homes -> gem directory)
> ls -al ~/.rvm/gems/ruby-1.8.7 (Substitute your gem directory as needed)
Is your gem in this directory?
Generally speaking, using sudo gem install with rvm is a bad idea.
As of Ruby 1.9.3 you no longer need, can, require rubygems and you only need to require rvm.
If you want to use it in your .irbrc file for using wirble or awsome print you can use a simple trick to avoid a login error saying it can't include or 'rubygems' or 'rvm'
if RUBY_VERSION > "1.8.7"
require 'rvm'
else
require 'rubygems'
end
require 'wirble'
Wirble.init
Wirble.colorize
Including both rubygems and rvm does not seem logical because RVM replaces rubygems in some sort to handle the gems and gem repositories.
Note: For Ruby 1.8 you must require 'rubygems' before requiring any gems.
source : https://guides.rubygems.org/rubygems-basics/

ruby-debug19: Can't get working with Ruby 1.9.1p376

I'm trying to use ruby-debug19 with Ruby 1.9.1p376 but am getting the following error:
test.rb:2:in `require': no such file to load -- ruby-debug19 (LoadError) from test.rb:2:in `<main>'
Here's test.rb:
require 'rubygems'
require 'ruby-debug19'
Here's the output of "gem list":
*** LOCAL GEMS ***
ruby-debug19 (0.11.6)
(etc.)
So running "ruby test.rb" generates the above error.
Am I doing this wrong? I thought this was the correct way to run ruby-debug19 (by including the gem and adding "debugger" statements) and haven't been able to find any articles/posts with the same problem.
I am using RVM but the above output is all under the same version of Ruby ("ruby -v" shows 1.9.1p376 as expected, and the gem list output is specific to that version and not the OS X system-installed version 1.8.7).
Try just
require 'ruby-debug'
(Despite the gem's name)
Also you don't need require 'rubygems' anymore when using Ruby 1.9.
For ruby 1.9.3 and Rails 3.2 with pow:
In your Gemfile:
group :development do
gem 'debugger'
end
And at the bottom of config/environments/development.rb:
require 'debugger'
Debugger.start_remote
Debugger.settings[:autoeval] = true
Then connect to the debugger in your terminal using:
rdebug -c
For bundler (rails 3):
gem 'ruby-debug19', :require => 'ruby-debug'

Resources