2

I just installed OS X Lion with Xcode 4.1. I'm using Ruby 1.9.2 and gems version 1.5.0. When trying to upgrade from Rails 3.0.9 to 3.1, I get the following error:

$ ruby -v
ruby 1.9.2p0 (2010-08-18 revision 29036) [i386-darwin9.8.0]
$  rails -v
Rails 3.0.9
$  gem -v
1.5.0
$  gem update rails
Updating installed gems
Updating rails
Building native extensions.  This could take a while...
ERROR:  Error installing rails:
    ERROR: Failed to build gem native extension.

        /Users/me/.rvm/rubies/ruby-1.9.2-p0/bin/ruby extconf.rb
creating Makefile

make
gcc -I. -I/Users/me/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1/i386-darwin9.8.0 -I/Users/me/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1/ruby/backward -I/Users/me/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE   -fno-common -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wshorten-64-to-32 -Wno-long-long  -fno-common -pipe  -o bcrypt_ext.o -c bcrypt_ext.c
In file included from /Users/me/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1/ruby.h:32,
                 from bcrypt_ext.c:1:
/Users/me/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1/ruby/ruby.h:108: error: size of array ‘ruby_check_sizeof_long’ is negative
/Users/me/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1/ruby/ruby.h:112: error: size of array ‘ruby_check_sizeof_voidp’ is negative
In file included from /Users/me/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1/ruby/intern.h:29,
                 from /Users/me/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1/ruby/ruby.h:1327,
                 from /Users/me/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1/ruby.h:32,
                 from bcrypt_ext.c:1:
/Users/me/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1/ruby/st.h:69: error: size of array ‘st_check_for_sizeof_st_index_t’ is negative
bcrypt_ext.c: In function ‘bc_salt’:
bcrypt_ext.c:42: warning: implicit conversion shortens 64-bit value into a 32-bit value
make: *** [bcrypt_ext.o] Error 1


Gem files will remain installed in /Users/me/.rvm/gems/ruby-1.9.2-p0/gems/bcrypt-ruby-3.0.1 for inspection.
Results logged to /Users/me/.rvm/gems/ruby-1.9.2-p0/gems/bcrypt-ruby-3.0.1/ext/mri/gem_make.out
Nothing to update

Does anyone know what's going on here?

Thanks!

fullstackplus
  • 1,061
  • 3
  • 17
  • 31

1 Answers1

1

Instead of doing "update", just do "gem install rails -v 3.1"

UPDATE: Apparently rails 3.1.0 (activemodel actually) depends on bcrypt-ruby. This dependency should be removed in 3.1.1 (see https://github.com/rails/rails/issues/2687).

If you don't want to wait, you'll need to resolve the building of bcrypt-ruby. The compiler error suggests there's a 32-bit/64-bit mismatch between ruby and the compiler. Did you install Lion over Leopard? If so you might have to rebuild all your rvm rubies and native-extension gems.

Even if you want to wait, you probably should rebuild anyway, because you'll likely run into this type of compiler issue again. As a test, try installing a native gem like: "gem install eventmachine". If you get the same errors, that's a good indicator that every native gem will have this issue.

See this page for someone who had similar problems upgrading to Snow Leopard, with explanation of the problem: http://jtigger-learning.wikidot.com/gem-install-fails-on-building-native-extensions

Kelvin
  • 20,119
  • 3
  • 60
  • 68
  • @robert I don't see any any mention of "gem install" by the OP. I only see "gem update". – Kelvin Sep 15 '11 at 20:28
  • He posted a non-answer which I deleted. All it said was "Tried that, and got this error..." and he copied essentially the same text you see above in the question. I'll undelete the answer so you can see it. – Robert Harvey Sep 15 '11 at 20:32
  • 1
    Thanks, that solved the problem. I did install Lion over Leopard. What I did: 1) `rvm remove ruby-1.9.x-*` on all previously install ruby versions; 2) `rvm install ruby-1.9.2-p290`; 3) $ `gem pristine --all`; 4) $ `gem install rails -v 3.1`. [This article](http://docwhat.org/2011/08/ruby-crashing-on-lion/) explains it very well. Thanks again - I ticked your answer but don't have enough reputation to vote it up. – fullstackplus Sep 17 '11 at 13:23