Ответ 1
Это сработало для меня:
$ gem uninstall libv8
$ gem install therubyracer
(Большое спасибо http://www.ruby-forum.com/topic/4306127)
Я был бы признателен за помощь в работе 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
Моя среда:
Это сработало для меня:
$ gem uninstall libv8
$ gem install therubyracer
(Большое спасибо http://www.ruby-forum.com/topic/4306127)
gem uninstall libv8
brew install v8
gem install therubyracer
Но почему это происходит, спросите вы? И почему удаление 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
.
Не считая ни одного, если выше это работало для меня на 100%, я думал, что опубликую, что сделал (как часть проекта рельсов):
gem uninstall libv8
bundle update therubyracer
Это привело к тому, что я получил последнюю версию therubyracer
, а также более новую версию libV8
и, похоже, исправил несколько проблем, которые я ударил, из отсутствующих файлов libv8.a, в методы undefined.
Наконец, я использую 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 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
Да, почти все мой Travis строит тайм-аут и терпит неудачу из-за этого. Если кто-нибудь знает способ решить эту проблему (я бы надеюсь, что "понижение therubyracer
" - последнее средство), оставьте комментарий!
Это может не работать для всех приложений, но похоже, что моим приложениям Rails 3.2.9 фактически не нужны therubyracer
или libv8
. После удаления этих драгоценных камней из моего Gemfile я подтвердил, что мои спецификации прошли, снова нажал на Travis и он успешно сработал. Итак, я думаю, что избавление от этих драгоценных камней (если вы не уверены, что они вам действительно нужны), по крайней мере, стоит попробовать.
Благодаря Paul Annesley за подтверждение того, что если вы работаете в Mac OS X 10.8 Mountain Lion, вам не нужно therubyracer
gem вообще, так как ОС уже поставляется в комплекте с Apple JavaScriptCore, собственным бегущим Javascript. Во время первоначального ответа я был на 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
Если вы были в середине обновления драгоценного камня, вы можете запустить bundle update therubyracer
после этого. (Рассмотрим номер версии)
Это было на Mac 10.6 (Snow Leopard).