`gem install therubyracer` не работает на Mac OS X Lion

Буду признателен за помощь в получении gem install therubyracer работать. Вот ошибка:

$ gem install therubyracer
Building native extensions.  This could take a while...
ERROR:  Error installing therubyracer:
    ERROR: Failed to build gem native extension.

        /Users/david/.rvm/rubies/ruby-1.9.3-p194/bin/ruby extconf.rb
checking for main() in -lobjc... yes
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
    --with-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/Users/david/.rvm/rubies/ruby-1.9.3-p194/bin/ruby
    --with-objclib
    --without-objclib
extconf.rb:15:in `<main>': undefined method `include_path' for Libv8:Module (NoMethodError)

Вот несколько заметных шагов, которые я выполнил до ошибки. Они работали нормально

$ gem install libv8
$ brew install v8

Моя среда это:

  • Mac OS X Lion 10.7.4
  • ruby 1.9.3p194 (2012-04-20 редакция 35410) [x86_64-darwin11.4.0] (через rvm)
  • V8 версия 3.9.24 (через доморощенный)

11 ответов

Решение

Это сработало для меня:

$ gem uninstall libv8
$ gem install therubyracer

(Большое спасибо http://www.ruby-forum.com/topic/4306127)

gem uninstall libv8
brew install v8
gem install therubyracer

Но почему это происходит, спросите вы? И почему происходит удаление libv8 и переустановка therubyracer решить проблему?

Ответ находится внизу сообщения об ошибке (из оригинального сообщения). Игнорировать материал о

probably lack of necessary libraries and/or headers

Это неверное предположение, написавшее это сообщение об ошибке. Внизу вы видите, что Руби говорит об этом:

undefined method `include_path' for Libv8:Module

В моем случае я пытался установить therubyracer-0.9.8 с bundle installи по какой-то причине он пытался использовать мою копию libv8-3.11.8.13, который был установлен в какой-то момент, вероятно, как зависимость от другого драгоценного камня.

Я не знаю, почему он пытался использовать более новую версию, потому что therubyracer.gemspec содержит s.add_dependency "libv8", "~> 3.3.10", И мой Gemfile.lock говорит использовать libv8 (3.3.10.2), Но, увы, это действительно то, что происходило.

И это правда, что Libv8:Module не имеет метода include_path в libv8-3.11.8.13, но это делает в libv8-3.3.10.2

Вот почему удаление всех ваших версий libv8 а затем переустановить therubyracer работает. Потому что все версии libv8 у которых нет метода include_path удаляются полностью, а libv8 у которого есть метод include путь переустанавливается при переустановке therubyracer,

Не считая ни одного, если вышеперечисленное сработало для меня на 100%, я решил опубликовать то, что сделал (как часть проекта rails):

gem uninstall libv8
bundle update therubyracer

Это убедилось, что я получил последнюю therubyracer, а также более свежая версия libV8и, кажется, исправляет множество проблем, от которых я сталкивался: от отсутствующих файлов libv8.a до неопределенных методов.

Наконец я использую therubyracer 0.11.0beta5 в качестве решения.

Использование therubyracer (0.11.0beta5)

добавить следующее на Gemfile

gem 'therubyracer', '~> 0.11.0beta5'
group :libv8 do
  gem 'libv8', "~> 3.11.8"
end

затем bundle install

Mac OSX 10.8 Moutain Lion

Если тебе надо 0.11.3 и это не удастся дать этому шанс для Mac OS X 10.9...

gem uninstall libv8
brew install v8
gem install libv8 -- --with-system-v8
gem install therubyracer -v '0.11.3' -- --with-system-v8

Смотрите эту проблему для более подробной информации.

Вам, вероятно, не нужно -- --with-system-v8 на последней строке, но я сделал это просто, чтобы быть в безопасности, так как я видел, как это начинает делать Fetching: libv8-3.11.8.17-x86_64-darwin-13.gem (1%) когда я управлял командой...

Во всяком случае, это работало для меня, когда все остальные вещи не.

Для тех, кто сталкивается с этой проблемой в Mac OSX 10.8 Mountain Lion при попытке обновить свой Gemfile с помощью gem 'therubyracer', '0.11.0' просто модернизирую систему libv8 gem работал для меня (не нужно удалять какой-либо другой gem):

$ gem update libv8
$ bundle install

редактировать

Если вы используете Travis-CI (или другие инструменты CI, расположенные на других серверах, я полагаю), вам нужно будет явно добавить libv8 драгоценный камень в ваш Gemfile, а также:

Gemfile

gem 'libv8', '3.11.8.3'

затем bundle install по-прежнему. Просто отметьте, что libv8 установка может занять значительное время, и я заметил, что это может привести к тому, что из-за превышения лимита времени Travis CI ваша сборка не будет выполнена. Вы можете немного смягчить это, не включая драгоценные камни среды разработки в свои сборки:

.travis.yml

# ...
bundler_args: --binstubs=./bundler_stubs --without development

Обновить

Да, почти весь мой Трэвис строит тайм-аут и терпит неудачу из-за этого. Если кто-нибудь знает способ решить эту проблему (надеюсь, понизить) therubyracer Это последнее средство), пожалуйста, оставьте комментарий!

Обновление 2

Это может работать не для всех приложений, но кажется, что мои приложения на Rails 3.2.9 на самом деле не нужны therubyracer или же libv8 в конце концов. После удаления этих драгоценных камней из моего Gemfile, я подтвердил, что мои спецификации прошли, снова отправил Трэвису, и он успешно построился. Итак, я думаю, что избавление от этих драгоценных камней (если вы не уверены, что они вам действительно нужны) по крайней мере стоит попробовать.

Обновление 3

Спасибо Paul Annesley за подтверждение, что если вы работаете на Mac OS X 10.8 Mountain Lion, вам не нужно therubyracer Само собой разумеется, поскольку операционная система уже поставляется в комплекте с Apple JavaScriptCore, ее собственным Javascript Runner. Во время первоначального ответа я был на Snow Leopard и, следовательно, нуждался в нем.

Для меня удаление файла Gemfile.lock и запуск bundle install работал это волшебство

OSX 10.8.2, ruby ​​1.9.3p125

Ничто из вышеперечисленного не сработало для меня... Я устал от попыток найти подходящий драгоценный камень для своей среды, поэтому я просто привязал к цели g++ эту пропавшую вещь:

sudo ln -s `which g++` /usr/bin/g++-4.2

Не так полезно для удаленного развертывания, но сделайте работу на моей рабочей станции.

Я получил аналогичную проблему, но он также жаловался на то, что не нашел g++-4.2. У меня были установлены инструменты командной строки XCode, но он искал /usr/bin/g++-4.2, у меня был g++ (это была символическая ссылка, указывающая на llvm-g++-4.2). В любом случае, я только что создал символическую ссылку на g ++ и снова попробовал установить пакет... это сработало!

$ cd /usr/bin

$ sudo ln -s g++ g++-4.2

Была та же ошибка, это работало для меня:

  1. Из консоли: gem uninstall libv8

  2. В вашем Gemfile добавьте следующее:

    gem 'therubyracer', :platforms => :ruby, :require => 'v8'
    gem 'libv8', '~> 3.11.8'  # Update version number as needed
    
  3. Из консоли: bundle install

Если вы были в процессе обновления драгоценного камня therubyracer, вы можете запустить bundle update therubyracer и после этого. (Рассмотрите возможность указания номера версии)

Это было на Mac 10.6 (Snow Leopard).

Другие вопросы по тегам