[ANN] RubyGems 0.8.0

Marking the 3000th download of RubyGems (http://rubygems.rubyforge.org), we are pleased to announce the release of RubyGems 0.8.0! The reaction and participation of the community so far as been astounding...keep those gems coming--this is your show; we're just trying to provide a little infrastructure!

DOWNLOAD HERE: http://rubyforge.org/frs/?group_id=126
...or....
$ gem install rubygems-update
$ update_rubygems

It's been a while since 0.7.0, but there's been a _ton_ of activity during this period. This is a VERY big release for us.

There are a lot of changes packed into 0.8.0 (listed in the release notes pasted at the bottom of this message), but there are a few things that stand out:

Replacement of library stub functionality

···

===============================
Instead of cluttering up the site_ruby directory with library/stub files, we can now load library files out of any installed gem without having to "require_gem" first. However, you'll have to first "require 'rubygems'" in order for this functionality to work. The easiest way to do this is to either pass "-rrubygems" on ruby's command line or set your RUBYOPT environment variable to include "rrubygems". The rubygems.rb file itself has been made to be VERY lightweight, so it should not be intrusive to load.

CAVEAT: libraries loaded with the "-r" switch on ruby's command line will not enjoy this seamless integration.

New Package Format

Graciously contributed by Mauricio Fernandez, RubyGems now uses tar/gzip as its package format. This shouldn't require any changes on the part of RubyGems' users and packagers/developers, BUT as new gems are added to the repository, anyone using RubyGems 0.7.0 will be unable to install them. If you see an error that looks like this:

ERROR: Error installing gem rubygems-update-0.8.0.gem[.gem]: Error reading files from gem

...it means you're trying to install a 0.8.0+ gem using RubyGems 0.7.0 or earlier.

Our advice to everyone is to upgrade now.

Pickaxe II

As you all know, the second edition of Programming Ruby is due out at the beginning of this month (pre-order NOW. It's an incredible book). Dave has made the chapter on RubyGems available as a PDF excerpt. Preview it here http://www.pragmaticprogrammer.com/titles/ruby/index.html to get a jump start on using RubyGems and creating your own gems, and then pick up the full book when it comes out. Even if you've read through the first edition multiple times (as many of us have), there is a _lot_ of great new stuff in the new edition.

What's coming?

We're getting awfully close to RubyGems 1.0. We've got some exciting things cooking, including graphical gem managers for various platforms, http://rubygems.org, and integration with the one-click ruby installer(s). Jim Weirich will be presenting RubyGems at this year's RubyConf (http://rubyconf.org). There are bound to be some teasers...

RubyGems is a party to which everyone is invited. Without YOUR libraries, the whole thing is meaningless. Help us celebrate RubyGems' "One Conference Year" birthday Oct. 1 (we started RubyGems at last year's RubyConf), by continuing to do what you're doing: Release more gems!

Thanks in advance for your continued feedback, patches, bug reports, and (most of all) gems.

Chad (for the RubyGems team)

Since so much else has changed, here's a dump of the release notes:

  * Remove need for library stubs. Set the RUBYOPT environment variable to include
   "rrubygems", and a normal require will find gem files. Continue to use 'require_gem gem_name, version' to specify gem versions.
  * Deprecated "test_suite_file" gemspec attribute in favor of "test_files" array.
  * Generates rdoc by default on installs.
  * Adopted tar/gzip file format, thanks to Mauricio Fernandez.
  * "gem rdoc" allows generation of rdoc after gem installation (will add a "gem test" in 0.9.0)
  * Application stubs can now accept an optional parameter of _VERSION_ that will run
   an arbitrary version of the application requested.
  * Various bug fixes
  * Various platform-independency improvements
  * "gem spec --all" displays spec info for all installed version of a given gem. * Dynamic caching of sources
  * Support for user-definable sources on the command line (thanks Assaph Mehr)
  * More intelligent support for platform-dependent gems. Use Platform::CURRENT when
   building a gem to set its platform to the one you're building on. Installation displays a choice of platform-dependent gems, allowing the user to pick.
  * Added "gem unpack" for "unpacking" a gem to the current directory

I STRONGLY suggest the RUBYOPT thing. And, because rubygems starts with an
'r' we actually have a file named ubygems.rb which enables:

ruby -rubygems

And the RUBYOPT can be: rubygems

So the double 'r' is not necessary.

But like Chad said, this feature lets you just use a standard 'require'
statement on any file in any gem and it does an automatic 'require_gem' for
you transparently. To do this we override the require method. So, if in
your scripts you perform a bogus require you may get a message like:

irb(main):001:0> require 'foo'
LoadError: No such file to load -- foo
        from
/usr/local/lib/ruby/site_ruby/1.8/rubygems/loadpath_manager.rb:5:in
`require__'
        from
/usr/local/lib/ruby/site_ruby/1.8/rubygems/loadpath_manager.rb:5:in
`require'
        from (irb):1

You notice the double require and require__ in the call stack. This is what
enables our transparency.

If you need to require a gem of a prior version though, you can still use
require_gem "GemName", "= x.y.z" to get that version. The require hack
always loads the latest version.

Best,

Rich

···

On 9/15/04 11:55 PM, "Chad Fowler" <chad@chadfowler.com> wrote:

Instead of cluttering up the site_ruby directory with library/stub
files, we can now load library files out of any installed gem without
having to "require_gem" first. However, you'll have to first "require
'rubygems'" in order for this functionality to work. The easiest way
to do this is to either pass "-rrubygems" on ruby's command line or set
your RUBYOPT environment variable to include "rrubygems". The
rubygems.rb file itself has been made to be VERY lightweight, so it
should not be intrusive to load.

Thanks Chad; this is a groovilicious release. For the collective
readership's benefit, I'd like to provide a few comments.

The library stub thing is dead. If you do this:

  require 'rubygems'
  require 'active_record' # (A)

then line (A) will cause 'active_record' to be loaded either from
site_ruby or from a gem (any gem). This gives us the transparency we've
been looking for. I believe a 'site_ruby' install will get first
preference, so if you have version requirements [1], then you should do
this:

  require 'rubygems'
  require_gem 'active_record', '= 0.7.9'

Rich strongly recommends setting the environment variable RUBYOPT to
'rubygems'. That's something each user has to do. I recommend that
developers make it easy for their users by including code like this:

  begin
    require 'ubygems' # (B)
  rescue LoadError
    warn "Don't have RubyGems 0.8+" if thats_a_concern?
  end

  require 'active_record'

This will now work on any user's machine, whether they have RubyGems
installed or not, and whether they've set their RUBYOPT variable or not.

Note: line (B) will work from RubyGems 0.8+ but not RubyGems 0.7-. That's
the idea.

Thanks for all the cool gems people have contributed. Now that this
release is out, I'm going to contribute some myself :slight_smile:

Some comments on other features:

* If your unit tests are in the 'test' directory of your project,
  and are all named 'tc_*.rb', then include this in your gemspec:

    spec.test_files = Dir.glob('test/tc_*.rb')

* If you have a test _suite_ file, which loads all the other tests,
  you can put this in instead:

    spec.test_file = 'test/test_suite.rb'

* If you have _several_ test suite files,

    spec.test_files = Dir.glob('test/ts_*.rb')

* The 'spec' and 'unpack' commands only work with _installed_ gems.
  I'll extend these commands to other gems for the next release.
  'unpack' is useful for taking a look inside a package. For example,

     gem unpack rake

  will create the directory './rake-0.4.7', or whatever your latest
  installed versions is.

Remember to take a look at the "Package Management with RubyGems" chapter
from Pickaxe II, available at

  http://www.pragmaticprogrammer.com/titles/ruby/

Remember also that RubyGems isn't the only game in town. Mauricio is
doing a fine job with RPA. The two projects overlap somewhat, but serve
slightly different purposes. Please try to organise your code and project
so that it can be easily packaged into a gem, into the RPA, into a
Debian/RPM/ebuild/... If you have any questions about this, fire away.

Cheers,
Gavin

Chad wrote:

···

Marking the 3000th download of RubyGems
(http://rubygems.rubyforge.org), we are pleased to announce the release
of RubyGems 0.8.0! [........]

Hi!

When trying to install the new rubygems 0.8 on a winxp system (latest one-click installer), I get the following error:

E:\Dokumente und Einstellungen\dranke\Eigene Dateien\rubygems-0.8.0>install.rb

As of RubyGems 0.8.0, library stubs are no longer needed.
Searching $LOAD_PATH for stubs to optionally delete (may take a while)...
....done.
No library stubs found.

   Successfully built RubyGem
   Name: sources
   Version: 0.0.1
   File: sources-0.0.1.gem
e:/programme/ruby/lib/ruby/site_ruby/1.8/rubygems/installer.rb:139:in `generate_
bin_scripts': You don't have write permissions into the e:/bin directory. (Gem::
FilePermissionError)
         from e:/programme/ruby/lib/ruby/site_ruby/1.8/rubygems/installer.rb:69:i
n `install'
         from E:/Dokumente und Einstellungen/dranke/Eigene Dateien/rubygems-0.8.0
/install.rb:144:in `install_rb'
         from E:/Dokumente und Einstellungen/dranke/Eigene Dateien/rubygems-0.8.0
/install.rb:148

E:\Dokumente und Einstellungen\dranke\Eigene Dateien\rubygems-0.8.0>irb
irb(main):001:0> require 'rbconfig'
=> true
irb(main):002:0> Config::CONFIG['bindir']
=> "e:/programme/ruby/bin"

So far, I have been unable to figure out where the "e:/bin" comes from, this directory doesn't exist on this computer.

In installer.rb: generate_bin_scripts CONFIG['bindir'] evaluates to the correct "e:/programme/ruby/bin" while Config::CONFIG['bindir'] evaluates to "e:/bin". When I change generate_bin_scripts to use CONFIG['bindir'] the install finishes without errors, but the sources gem is not installed and trying to install it manually produces:

E:\Dokumente und Einstellungen\dranke\Eigene Dateien\rubygems-0.8.0\packages\sou

gem install sources-0.0.1.gem

Attempting local installation of 'sources-0.0.1.gem'
ERROR: Error installing gem sources-0.0.1.gem[.gem]: uninitialized constant Gem
::Installer::CONFIG

I hope someone has some kind of idea what causes all of this.

···

--
exoticorn/farbrausch

Sadly, I have an error to report on installation:

c:/apps/ruby/lib/ruby/site_ruby/1.8/rubygems/installer.rb:139:in `generate_bin_s
cripts': You don't have write permissions into the c:/bin directory. (Gem::FileP
ermissionError)
        from c:/apps/ruby/lib/ruby/site_ruby/1.8/rubygems/installer.rb:69:in `in
stall'
        from install.rb:144:in `install_rb'
        from install.rb:148

I was using

    gem install rubygems-update
    update_rubygems

Note where my ruby is: C:/Apps/Ruby -- yet it still tried to install
something into C:/Bin.

-austin

···

On Thu, 16 Sep 2004 12:55:59 +0900, Chad Fowler <chad@chadfowler.com> wrote:

Marking the 3000th download of RubyGems
(http://rubygems.rubyforge.org ), we are pleased to announce the release
of RubyGems 0.8.0! The reaction and participation of the community so
far as been astounding...keep those gems coming--this is your show;
we're just trying to provide a little infrastructure!

--
Austin Ziegler * halostatue@gmail.com
               * Alternate: austin@halostatue.ca
: as of this email, I have [ 6 ] Gmail invitations

Thanks. We've had several reports of similar things on Windows (and
gotten quite a bit of data from some of them). We'll have a look and
release a patch as soon as we've got a fix.

Chad

···

On Thu, 16 Sep 2004, Austin Ziegler wrote:

# On Thu, 16 Sep 2004 12:55:59 +0900, Chad Fowler <chad@chadfowler.com> wrote:
# > Marking the 3000th download of RubyGems
# > (http://rubygems.rubyforge.org ), we are pleased to announce the release
# > of RubyGems 0.8.0! The reaction and participation of the community so
# > far as been astounding...keep those gems coming--this is your show;
# > we're just trying to provide a little infrastructure!
#
# Sadly, I have an error to report on installation:
#
# c:/apps/ruby/lib/ruby/site_ruby/1.8/rubygems/installer.rb:139:in `generate_bin_s
# cripts': You don't have write permissions into the c:/bin directory. (Gem::FileP
# ermissionError)
# from c:/apps/ruby/lib/ruby/site_ruby/1.8/rubygems/installer.rb:69:in `in
# stall'
# from install.rb:144:in `install_rb'
# from install.rb:148
#
# I was using
#
# gem install rubygems-update
# update_rubygems
#
# Note where my ruby is: C:/Apps/Ruby -- yet it still tried to install
# something into C:/Bin.
#
# -austin
# --
# Austin Ziegler * halostatue@gmail.com
# * Alternate: austin@halostatue.ca
# : as of this email, I have [ 6 ] Gmail invitations
#

Chad Fowler wrote:

Thanks. We've had several reports of similar things on Windows (and
gotten quite a bit of data from some of them). We'll have a look and
release a patch as soon as we've got a fix.

Chad

Here's a another data point, from my win2k box:

   Successfully built RubyGem
   Name: sources
   Version: 0.0.1
   File: sources-0.0.1.gem
c:/ruby/lib/ruby/site_ruby/1.8/rubygems/installer.rb:139:in `generate_bin_scripts': You don't have write permissions into the c:/bin directory. (
Gem::FilePermissionError)
         from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/installer.rb:69:in `install'
         from install.rb:144:in `install_rb'
         from install.rb:148

My Ruby instance lives n c:\ruby.
ruby 1.8.2 (2004-07-29) [i386-mswin32]

gems uninstall rubygems-update
fails, too.

James

It turns out that our release manager for 0.8.0 (me) made a mistake
and missed a couple of the 0.8.0 tagged files. Not really sure how
that happened, but we have just released RubyGems 0.8.1.

This should fix the problems that Windows users have been seeing with 0.8.0.

You can either download it from
http://rubyforge.org/frs/?group_id=126

or do (assuming you have a working rubygems installation):

$ gem install rubygems-update
$ update_rubygems

Thanks for the help tracking this one down (plus the patches we've
already recieved for 0.8.0)!

Keep those gems coming.

Chad

···

On Fri, 17 Sep 2004 00:44:55 +0900, James Britt <jamesunderbarb@neurogami.com> wrote:

Chad Fowler wrote:

> Thanks. We've had several reports of similar things on Windows (and
> gotten quite a bit of data from some of them). We'll have a look and
> release a patch as soon as we've got a fix.
>
> Chad
>

Here's a another data point, from my win2k box:

   Successfully built RubyGem
   Name: sources
   Version: 0.0.1
   File: sources-0.0.1.gem
c:/ruby/lib/ruby/site_ruby/1.8/rubygems/installer.rb:139:in
`generate_bin_scripts': You don't have write permissions into the c:/bin
directory. (
Gem::FilePermissionError)
         from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/installer.rb:69:in
`install'
         from install.rb:144:in `install_rb'
         from install.rb:148

My Ruby instance lives n c:\ruby.
ruby 1.8.2 (2004-07-29) [i386-mswin32]

gems uninstall rubygems-update
fails, too.

James

(I thought I sent this earlier but it didn't go through...excuse me if
this is a duplicate).

Our release manager for RubyGems 0.8.0 (me, in fact) somehow didn't
grab all of the 0.8.0-tagged files in CVS when 0.8.0 was released, so
we missed some windows-related bug fixes that were done just prior to
release.

This is the cause of the errors that some Windows users have reported.

So, we give you:

RubyGems 0.8.1

Get it here:
http://rubyforge.org/frs/?group_id=126
or
$ gem install rubygems-update
$ update_rubygems

Thanks for all of the feedback and testing so far on this release!
We've already gotten some good patches and a lot of great suggestions!

Keep those gems coming.

Chad

···

On Fri, 17 Sep 2004 00:44:55 +0900, James Britt <jamesunderbarb@neurogami.com> wrote:

Chad Fowler wrote:

> Thanks. We've had several reports of similar things on Windows (and
> gotten quite a bit of data from some of them). We'll have a look and
> release a patch as soon as we've got a fix.
>
> Chad
>

Here's a another data point, from my win2k box:

   Successfully built RubyGem
   Name: sources
   Version: 0.0.1
   File: sources-0.0.1.gem
c:/ruby/lib/ruby/site_ruby/1.8/rubygems/installer.rb:139:in
`generate_bin_scripts': You don't have write permissions into the c:/bin
directory. (
Gem::FilePermissionError)
         from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/installer.rb:69:in
`install'
         from install.rb:144:in `install_rb'
         from install.rb:148

My Ruby instance lives n c:\ruby.
ruby 1.8.2 (2004-07-29) [i386-mswin32]

gems uninstall rubygems-update
fails, too.

James

This installs fine now, however there appears to be some kind of problem installing dependencies through a proxy server. Trying to remote install rails I get the following:

E:\Programme\ruby\lib\ruby\gems\1.8>gem install rails -p http://esperanto:8080
Attempting local installation of 'rails'
Local gem file not found: rails*.gem
Attempting remote installation of 'rails'
Install required dependency actionpack? [Yn] Y
Updating Gem source index for: http://gems.rubyforge.org
ERROR: While executing gem ... (Errno::ECONNRESET)
     Eine vorhandene Verbindung wurde vom Remotehost geschlossen. - connect(2)

This looks a lot like what happens when I try to install actionpack without specifying the proxy:

E:\Programme\ruby\lib\ruby\gems\1.8>gem install actionpack
Attempting local installation of 'actionpack'
Local gem file not found: actionpack*.gem
Attempting remote installation of 'actionpack'
Updating Gem source index for: http://gems.rubyforge.org
ERROR: While executing gem ... (Errno::ECONNRESET)
     Eine vorhandene Verbindung wurde vom Remotehost geschlossen. - connect(2)

Installing actionpack directly through the proxy does work, though, so maybe the proxy option is for some reason dropped when trying to download the dependecies.

···

On Sat, 18 Sep 2004 00:13:44 +0900, Chad Fowler <chadfowler@gmail.com> wrote:

So, we give you:

RubyGems 0.8.1

--
exoticorn/farbrausch

Thanks, Dennis. This is going to require some pretty hefty tracking.
I tried to reproduce it behind a proxy here at work and couldn't get
it to go wrong. Can you tell us anything about your proxy config?

Thanks,
Chad

···

On Sat, 18 Sep 2004 00:59:49 +0900, Dennis Ranke <dennis.ranke@epost.de> wrote:

On Sat, 18 Sep 2004 00:13:44 +0900, Chad Fowler <chadfowler@gmail.com> > wrote:

> So, we give you:
>
> RubyGems 0.8.1

This installs fine now, however there appears to be some kind of problem
installing dependencies through a proxy server. Trying to remote install
rails I get the following:

E:\Programme\ruby\lib\ruby\gems\1.8>gem install rails -p
http://esperanto:8080
Attempting local installation of 'rails'
Local gem file not found: rails*.gem
Attempting remote installation of 'rails'
Install required dependency actionpack? [Yn] Y
Updating Gem source index for: http://gems.rubyforge.org
ERROR: While executing gem ... (Errno::ECONNRESET)
     Eine vorhandene Verbindung wurde vom Remotehost geschlossen. -
connect(2)

This looks a lot like what happens when I try to install actionpack
without specifying the proxy:

E:\Programme\ruby\lib\ruby\gems\1.8>gem install actionpack
Attempting local installation of 'actionpack'
Local gem file not found: actionpack*.gem
Attempting remote installation of 'actionpack'
Updating Gem source index for: http://gems.rubyforge.org
ERROR: While executing gem ... (Errno::ECONNRESET)
     Eine vorhandene Verbindung wurde vom Remotehost geschlossen. -
connect(2)

Installing actionpack directly through the proxy does work, though, so
maybe the proxy option is for some reason dropped when trying to download
the dependecies.

While trying to track down where the proxy option is lost, I just found the problem: Line 189 of remote_install.rb (in install_dependencies()) reads:

remote_installer = RemoteInstaller.new

but should be something like:

if @http_proxy == false
   remote_installer = RemoteInstaller.new(:no_proxy)
elsif @http_proxy == true
   remote_installer = RemoteInstaller.new
else
   remote_installer = RemoteInstaller.new(@http_proxy)
end

Without the proxy option the setting from the environment variable is used, so this bug only shows itself when you need to use the proxy to connect to the internet but don't have the environment variable set.

···

On Sat, 18 Sep 2004 02:52:59 +0900, Chad Fowler <chadfowler@gmail.com> wrote:

Thanks, Dennis. This is going to require some pretty hefty tracking.
I tried to reproduce it behind a proxy here at work and couldn't get
it to go wrong. Can you tell us anything about your proxy config?

--
exoticorn/farbrausch

> Thanks, Dennis. This is going to require some pretty hefty tracking.
> I tried to reproduce it behind a proxy here at work and couldn't get
> it to go wrong. Can you tell us anything about your proxy config?

While trying to track down where the proxy option is lost, I just found
the problem: Line 189 of remote_install.rb (in install_dependencies())
reads:

remote_installer = RemoteInstaller.new

but should be something like:

if @http_proxy == false
   remote_installer = RemoteInstaller.new(:no_proxy)
elsif @http_proxy == true
   remote_installer = RemoteInstaller.new
else
   remote_installer = RemoteInstaller.new(@http_proxy)
end

Aha! :slight_smile:

Without the proxy option the setting from the environment variable is
used, so this bug only shows itself when you need to use the proxy to
connect to the internet but don't have the environment variable set.

Thanks! I will add this code. I always have the environment variable
set, so I forgot to test with out it (even when you reported the bug).
Thanks a lot for finding this and fixing it.

Chad

···

On Tue, 21 Sep 2004 19:04:45 +0900, Dennis Ranke <dennis.ranke@epost.de> wrote:

On Sat, 18 Sep 2004 02:52:59 +0900, Chad Fowler <chadfowler@gmail.com> > > > wrote: