`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
Была та же ошибка, это работало для меня:
Из консоли:
gem uninstall libv8
В вашем Gemfile добавьте следующее:
gem 'therubyracer', :platforms => :ruby, :require => 'v8' gem 'libv8', '~> 3.11.8' # Update version number as needed
Из консоли:
bundle install
Если вы были в процессе обновления драгоценного камня therubyracer, вы можете запустить bundle update therubyracer
и после этого. (Рассмотрите возможность указания номера версии)
Это было на Mac 10.6 (Snow Leopard).