`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 (через доморощенный)

Ответ 2

gem uninstall libv8
brew install v8
gem install therubyracer

Ответ 3

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

Ответ находится в нижней части сообщения об ошибке (from orig post). Игнорируйте материал о

probably lack of necessary libraries and/or headers

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

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.

Ответ 4

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

gem uninstall libv8
bundle update therubyracer

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

Ответ 5

Наконец, я использую 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

Ответ 6

Если вам нужно 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%), когда я запустил команду...

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

Ответ 7

Для тех, кто сталкивается с этой проблемой на Mac OSX 10.8 Mountain Lion при попытке обновить свой Gemfile с помощью gem 'therubyracer', '0.11.0', для меня работала только модернизация системы libv8 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

Update

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

Обновление 2

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

Обновление 3

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

Ответ 8

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

Ответ 9

OSX 10.8.2, ruby ​​1.9.3p125

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

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

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

Ответ 10

У меня была аналогичная проблема, но она также жаловалась на то, что не найдет 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

Ответ 11

Имел ту же ошибку, это сработало для меня:

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

  • В Gemfile добавьте следующее:

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

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

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