8

Any idea why I can't install therubyracer gem for Mac 10.9 and Rails 3?

Installing therubyracer (0.11.3) 
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

        /Users/xiruki/.rvm/rubies/ruby-1.9.3-p448/bin/ruby extconf.rb 
checking for main() in -lpthread... yes
checking for main() in -lobjc... yes
checking for v8.h... yes
creating Makefile

make
compiling accessor.cc
clang: warning: argument unused during compilation: '-rdynamic'
In file included from accessor.cc:1:
./rr.h:462:14: error: no type named 'AccessorGetter' in namespace 'v8'
  inline v8::AccessorGetter accessorGetter() {return &AccessorGetter;}
         ~~~~^
./rr.h:463:14: error: no type named 'AccessorSetter' in namespace 'v8'
  inline v8::AccessorSetter accessorSetter() {return RTEST(set) ? &AccessorSetter : 0;}
         ~~~~^
./rr.h:465:14: error: no type named 'NamedPropertyGetter' in namespace 'v8'
  inline v8::NamedPropertyGetter namedPropertyGetter() {return &NamedPropertyGetter;}
         ~~~~^
./rr.h:466:14: error: no type named 'NamedPropertySetter' in namespace 'v8'
  inline v8::NamedPropertySetter namedPropertySetter() {return RTEST(set) ? &NamedPropertySetter : 0;}
         ~~~~^
./rr.h:467:14: error: no type named 'NamedPropertyQuery' in namespace 'v8'
  inline v8::NamedPropertyQuery namedPropertyQuery() {return RTEST(query) ? &NamedPropertyQuery : 0;}
         ~~~~^
./rr.h:468:14: error: no type named 'NamedPropertyDeleter' in namespace 'v8'
  inline v8::NamedPropertyDeleter namedPropertyDeleter() {return RTEST(deleter) ? &NamedPropertyDeleter : 0;}
         ~~~~^
./rr.h:469:14: error: no type named 'NamedPropertyEnumerator' in namespace 'v8'
  inline v8::NamedPropertyEnumerator namedPropertyEnumerator() {return RTEST(enumerator) ? &NamedPropertyEnumerator : 0;}
         ~~~~^
./rr.h:471:14: error: no type named 'IndexedPropertyGetter' in namespace 'v8'
  inline v8::IndexedPropertyGetter indexedPropertyGetter() {return &IndexedPropertyGetter;}
         ~~~~^
./rr.h:472:14: error: no type named 'IndexedPropertySetter' in namespace 'v8'
  inline v8::IndexedPropertySetter indexedPropertySetter() {return RTEST(set) ? &IndexedPropertySetter : 0;}
         ~~~~^
./rr.h:473:14: error: no type named 'IndexedPropertyQuery' in namespace 'v8'
  inline v8::IndexedPropertyQuery indexedPropertyQuery() {return RTEST(query) ? &IndexedPropertyQuery : 0;}
         ~~~~^
./rr.h:474:14: error: no type named 'IndexedPropertyDeleter' in namespace 'v8'
  inline v8::IndexedPropertyDeleter indexedPropertyDeleter() {return RTEST(deleter) ? &IndexedPropertyDeleter : 0;}
         ~~~~^
./rr.h:475:14: error: no type named 'IndexedPropertyEnumerator' in namespace 'v8'
  inline v8::IndexedPropertyEnumerator indexedPropertyEnumerator() {return RTEST(enumerator) ? &IndexedPropertyEnumerator : 0;}
         ~~~~^
./rr.h:481:20: error: no type named 'AccessorInfo' in namespace 'v8'
    Info(const v8::AccessorInfo& info);
               ~~~~^
./rr.h:487:22: error: no type named 'AccessorInfo' in namespace 'v8'
    inline const v8::AccessorInfo* operator->() {return this->info;}
                 ~~~~^
./rr.h:501:15: error: no type named 'AccessorInfo' in namespace 'v8'
    const v8::AccessorInfo* info;
          ~~~~^
./rr.h:505:89: error: no type named 'AccessorInfo' in namespace 'v8'
  static v8::Handle<v8::Value> AccessorGetter(v8::Local<v8::String> property, const v8::AccessorInfo& info);
                                                                                    ~~~~^
./rr.h:506:100: error: no type named 'AccessorInfo' in namespace 'v8'
  static void AccessorSetter(v8::Local<v8::String> property, v8::Local<v8::Value> value, const v8::AccessorInfo& info);
                                                                                               ~~~~^
./rr.h:508:94: error: no type named 'AccessorInfo' in namespace 'v8'
  static v8::Handle<v8::Value> NamedPropertyGetter(v8::Local<v8::String> property, const v8::AccessorInfo& info);
                                                                                         ~~~~^
./rr.h:509:122: error: no type named 'AccessorInfo' in namespace 'v8'
  static v8::Handle<v8::Value> NamedPropertySetter(v8::Local<v8::String> property, v8::Local<v8::Value> value, const v8::AccessorInfo& info);
                                                                                                                     ~~~~^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
make: *** [accessor.o] Error 1


Gem files will remain installed in /Users/xiruki/.rvm/gems/ruby-1.9.3-p448@ensemblist/gems/therubyracer-0.11.3 for inspection.
Results logged to /Users/xiruki/.rvm/gems/ruby-1.9.3-p448@ensemblist/gems/therubyracer-0.11.3/ext/v8/gem_make.out

An error occurred while installing therubyracer (0.11.3), and Bundler cannot continue.
Make sure that `gem install therubyracer -v '0.11.3'` succeeds before bundling.

Any workarounds will be appreciated.

Arjan Tijms
  • 37,782
  • 12
  • 108
  • 140
xirukitepe
  • 1,575
  • 7
  • 26
  • 54
  • 1
    Re: Workaround - don't use therubyracer. You can substitute by installing node.js in any environment that doesn't come with a JS engine out of the box (e.g. Linux). OS X and Windows don't need it for standard Rails apps. – PinnyM Nov 18 '13 at 13:04
  • 4
    Wondering if there was any resolution to this other than the above workaround. If so, can you provide an answer? – miked Dec 20 '13 at 05:02
  • Different OSX and rails versions, but we ended up having to build our own libv8 (3.16.14.7) to get everything to bundle right - it's been about a year, and I don't remember the specifics. We tote that libv8 around for our dev boxes - it's not a problem on Linux production. – dwilkins Sep 10 '15 at 20:46

2 Answers2

0

what do you declare in your Gemfile?

try this:

gem 'therubyracer', platforms: :ruby

Zen
  • 382
  • 3
  • 9
  • Your suggestion is more suitable for a comment and does not really qualifies as an answer. – whizcreed Jan 24 '14 at 11:13
  • i don't agree with you: in many cases it simply resolve that problem without the needs of installing nodejs into the system. if the solution can be easy it doesn't mean it needs to be suggested in a comment, anyway happy downvote :-( – Zen Jan 27 '14 at 11:41
0

Try bundle update

if it does not work, try

gem uninstall libv8
brew install v8
gem install libv8 -- --with-system-v8
gem install therubyracer -v '0.11.3' -- --with-system-v8
user2012677
  • 5,465
  • 6
  • 51
  • 113