This is a follow-up to this question.
When I issue the gem update
command on Windows, whenever it gets to a
gem whose latest version DOESN'T have Windows binaries, it'll attempt to
build the native extension which will, of course, fail. For example:
Updating sqlite3-ruby
Building native extensions. This could take a while...
ERROR: While executing gem ... (Gem::Installer::ExtensionBuildError)
ERROR: Failed to build gem native extension.
c:/ruby/bin/ruby.exe extconf.rb update
checking for fdatasync() in rt.lib... no
checking for sqlite3.h... no
nmake
'nmake' is not recognized as an internal or external command,
operable program or batch file.
The old pre-1.x behavior of asking for the required platform at least made updating possible. Now I can't update at all unless I uninstall the troublesome gems (currently sqlite3-ruby and hpricot), run the update, then re-install the gems using the --version switch.
Does anyone have a solution to this conundrum or are we stuck with it?
Note:
$ gem -v
1.2.0
$ ruby -v
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
Note (26 September 2008): I just updated to gems 1.3.0 and this problem persists.
Note (18 November 2008): Just updated to gems 1.3.1 and the problem persists.
Note (28 April 2009): The latest version of Gems (1.3.2) now skips any gems where building of native extensions fails during update; in other words, the problem is fixed. Hooray!
Execute the below command and it should work:
Looking at the RubyForge file list for sqlite3-ruby reveals that version 1.2.3 has gems that were built using Visual Studio 6 and MinGW (sqlite3-ruby-1.2.3-mswin32.gem & sqlite3-ruby-1.2.3-x86-mingw32.gem). However, version 1.2.4 doesn't not have any such pre-built gems.
If you have Visual Studio 6 or MinGW installed and have the compiler environment variables set up (at least for Visual Studio 6 but not sure about MinGW), the gem should build during installation. I'm not sure if the gems will build under newer versions of Visual Studio.
Gems, as of version 1.3.2, will now skip gems that fail to build, so update Rubygems to the latest version and the problem discussed here should be solved.
The following solution is now deprecated, but I leave it here for the record.
I started a thread on this issue on the Ruby Forum (it's a front end to the mailing list). There's some interesting discussion; it's worth a read. There's even a very hacky solution to this problem on there:
It calls the
gem outdated
command and builds a list of all of the outdated gems. It then iterates over the list and callsgem update
for each individual outdated gem. If one fails, it just moves onto the next.It seems that we are stuck. I have found here that there is no mswin32 gem for the last version (1.2.4), I tried to install it on my computer and got the same problem.
Installing the previous version works fine: