Ошибка установки libv8: ОШИБКА: не удалось собрать собственное расширение для gem


183

Я сделал проект с рельсами,

rails new test_bootstrap.

удалось.

переехал в проект dir и добавил драгоценные камни

gem "therubyracer"
gem "less-rails" #Sprockets (what Rails 3.1 uses for its asset pipeline) supports LESS
gem "twitter-bootstrap-rails"

и беги

bundle install

после этого у меня есть эта ошибка.

Installing libv8 (3.16.14.3)
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

c:/RailsInstaller/Ruby1.9.3/bin/ruby.exe extconf.rb
creating Makefile
지정된 경로를 찾을  없습니다.                                                          지정된 경로를 찾을 
없습니다.                                                          지정된 경로를 찾을  없습니다.

c:/RailsInstaller/Ruby1.9.3/lib/ruby/ge
ms/1.9.1/gems/libv8-3.16.14.3/ext/libv8/builder.rb:58:in `setup_python!': libv8 requires
python 2 to be installed in order to build, but it is currently not available (RuntimeErr
or) from c:/RailsInstaller/Ruby1.9.
3/lib/ruby/gems/1.9.1/gems/libv8-3.16.14.3/ext/libv8/builder.rb:42:in `block in build_lib
v8/builder.rb:42:in `block in build_libv8!'
        from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/libv8-3.16.14.3/ext/lib
v8/builder.rb:40:in `chdir'
        from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/libv8-3.16.14.3/ext/lib
v8/builder.rb:40:in `build_libv8!'
        from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/libv8-3.16.14.3/ext/lib
v8/location.rb:24:in `install!'
        from extconf.rb:7:in `<main>'                                                    


Gem files will remain installed in c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/l
ibv8-3.16.14.3 for inspection.
Results logged to c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/libv8-3.16.14.3/ex
t/libv8/gem_make.out
An error occurred while installing libv8 (3.16.14.3), and Bundler cannot
continue.
Make sure that `gem install libv8 -v '3.16.14.3'` succeeds before bundling.

извините за некоторых корейцев. Он говорит, что не может найти выбранный путь или что-то в этом роде.

и я попытался запустить эту команду

gem install libv8 -v '3.16.14.3' 

бросать ту же ошибку.



Я нашел это, я должен установить Python и установить путь. и теперь это работает. надеюсь люди решат с этой веткой. stackoverflow.com/questions/10812696/…
Canna

Не заглядывайте в рот дареному коню :) Из-за отсутствия поддержки безопасности Debian для экосистемы вокруг libv8 и Node.js : «Платформа Node.js построена на основе libv8-3.14, которая обеспечивает высокий уровень безопасности. проблем, но в настоящее время в проекте нет волонтеров или команды безопасности, которая достаточно заинтересована и готова потратить большое количество времени, необходимого для решения этих
возникающих

Ответы:


612

Попробуй это:

gem install libv8 -v '3.16.14.3' -- --with-system-v8

Примечание: поскольку libv8 является интерфейсом для движка V8, используемого therubyracer, вам может понадобиться использовать libv8, даже если у вас уже установлен V8. Если вы хотите использовать собственную установку V8, а не собирать ее для себя, используйте эту --with-system-v8опцию.

Для получения дополнительной информации вы можете просмотреть документацию libv8 на github.


6
Я использую это. Он компилируется нормально, но у меня все еще есть ошибки при запуске 'bundle'
Sucrenoir

10
Эта часть работала, но я все еще получаю ошибку при установке therubyracer. Это дает мне ошибку, похожую на ту, что я получал раньше с libv8, «убедитесь, что то и то успешно выполняется перед сборкой», но когда я пытаюсь запустить «gem install therubyracer», я получаю «Не удалось создать собственное расширение gem». ошибка
шестьдесят четыре бита

1
Я удаляю и переустанавливаю его с аргументом приведенным выше как root. Не работает. Моя ошибка An error occurred while installing libv8 (3.16.14.3), and Bundler cannot continue.и Bundler::GemspecError: Could not read gem at /home/gitlab/gitlab/vendor/bundle/ruby/2.1.0/cache/libv8-3.16.14.3-x86_64-linux.gem. It may be corrupted. я удаляю всю папку кеша и перезапускаю bundle install --full-index --deployment --without development test postgres aws. Работает.
Ник Донг

1
Отлично! gem install libv8 -v '3.16.14.3' -- --with-system-v8работал для меня на OS X 10.11.
Джагдип Сингх

Я обнаружил, что он не может найти систему v8, поэтому это brew install v8помогло. Следуйте инструкциям в этом ответе здесь: stackoverflow.com/questions/24081473/…
redfox05

154

Как решить проблему libv8 / therubyracer

Я столкнулся с подобной проблемой, в которой после установки libv8 возникает ошибка при установке therubyracer. Вот мое решение:

$ gem install libv8 -v '3.16.14.3' -- --with-system-v8
   
$ bundle install

- увидеть ошибку при установке therubyracer -

$ gem uninstall libv8

$ brew install v8

$ gem install therubyracer

$ bundle install

ошибка установки libv8

$ gem install libv8 -v '3.16.14.3' -- --with-system-v8

4
шаги, упомянутые в этом ответе, работают лучше всего, нам нужно сначала установить gem libv8, удалить для установки всей системы v8, а затем установить gem therubyracer (gem install libv8 с флагом --with-system-v8) :)
Parthan

1
Я не думаю, что вам нужен первый шаг. Перед запуском пакетной установки используйте brew для установки системы v8. Затем установите оба камня therubyracer и libv8 вручную. и запустите пакетную установку. Но я еще не пробовал.
Гитб

Это также работало для меня на OSX 10.10.5 с ruby ​​2.1.2p95 для libv8 3.16.14.11
Майкл Оукли

3
Не забудьте поменять '3.16.14.3' на версию, которую пытается запустить комплект, или она не будет работать при запуске комплекта
Jonathon Blok

Также работал в 10.12 (Sierra) с рубином 1.9.3 для libv '3.16.14.11'
пришлец

48

С homebrew это помогает мне решить эту ошибку.

brew tap homebrew/versions
brew install v8-315

gem install libv8 -v '3.16.14.13' -- --with-system-v8
gem install therubyracer -- --with-v8-dir=/usr/local/opt/v8-315

bundle install

Видел на рубирейсере вопросы Github.


Это сработало для меня, хотя и устанавливает более старую версию v8 через brew.
Санджай

1
Эта ошибка сводит меня с ума каждый раз, когда я переключаю версию ruby. Я думаю, что вы можете попробовать настроить вариант версии v8 и путь, чтобы получить его.
увлекаться кодированием

у меня работает только это решение, спасибо за решение
AMIC MING

@codingaddicted Вы когда-нибудь полагали, что эта ошибка продолжает происходить? Я обновил ruby ​​и rails для нового проекта и всегда получаю эту ошибку, когда открываю новую оболочку для своего старого проекта. Предполагается, что rvm решит эти проблемы с версией, но мне нужно продолжать выполнять ваши команды выше каждый раз, когда я открываю новую оболочку для своего старого проекта.
iamse7en

@ iamse7en, насколько я помню, я должен запускать их для каждой версии ruby. Я видел эту ошибку, когда обновлял ruby ​​(но я не делал так много ruby ​​в последние месяцы и не играл с разными версиями).
кодирование зависимых

43

Я испробовал приведенную выше команду, которая выглядит очень хорошо для установки отдельных гемов, но для пользователей комплектов - вы должны использовать комплектный комплект

использование

bundle config build.libv8 --with-system-v8 

и

bundle config build.therubyracer --with-system-v8

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


6
По какой-то причине мой конфиг пакета требовал следующего, чтобы найти правильную сборку (которая использует установку brew из приведенного ниже ответа на вопрос о зависимом от кода) bundle config build.therubyracer --with-v8-dir=/usr/local/opt/v8-315
iturgeon

7

Я не думаю, что вам нужен therubyracerдрагоценный камень на окнах. Это среда исполнения javascript, использующая движок V8. Следовательно, он пытается установить libv8.

Вы можете безопасно удалить драгоценный камень из своего Gemfile.

Rails с радостью использует то, что когда-либо может найти. execjsи nodejsт. д. все возможные варианты.

Microsoft уже встраивает JScript для Javascript в Windows, и Rails использует его. Смотрите это для более


6

Другой способ обойти проблему - разделить их в Gemfile.

group :production do
 gem 'libv8', '~> 3.11.8.3'
 gem 'therubyracer', :platform => :ruby
end

А затем выполните команду bundle: bundle install --without production


Это хорошо работает в сочетании с ответом @Litmus, потому что это показывает, как вы можете сохранить драгоценный камень в конфигурации (что, вероятно, будет иметь отношение к развертыванию), не нарушая настройки разработки в Windows.
Гленатрон

3

Я также не смог установить этот драгоценный камень вместо использования

--with-system-v8

однажды попробуйте сделать обновление связки, которое работало хорошо для меня


3

нашел это на github

при условии, что вы попробовали упомянутые выше шаги, установили v8-315 и v8 через brew.

brew unlink v8
brew link --force v8-315
gem install therubyracer -v '0.12.2' -- --with-system-v8

2

Это подходит для меня. Поместите это в свой Gemfile

gem 'libv8', '~> 3.16.14.7'


это решение привело меня, bundle install --no-deploymentа затем bundle installсработало для меня
simo

2

Моя проблема не была связана ни с чем, кроме therubyracerкак с libv8самоцветом, и, как указал @ rishav-bhardwaj, --with-system-v8этого не произошло, вместо этого мне пришлось

bundle update

затем

bundle install

и наконец

Bundle complete!

Ошибка ушла!

Gem::Ext::BuildError: ERROR: Failed to build gem native extension. An error occurred while installing libv8 (3.16.14.7), and Bundler cannot continue. Make sure that `gem install libv8 -v '3.16.14.7'` succeeds before bundling.


1

В моем случае я решил эту ситуацию, требуя 'mini_racer', '~> 0.2.6' в моем Gemfile

Затем сработала команда bundle install.


0

Попробуй с

gem "therubyracer", "~> 0.10.2" для Gemfile

И он установит зависимый гем libv8 (3.3.10.4), и проблема сбоя собственного расширения сборочного гема будет решена.


0

Решена 3.16.14.7проблема с libv8 с помощью следующей команды:

gem install libv8 -v '3.16.14.7' -- --with-system-v8

И тогда bundle installуспешно завершено.


0

я чувствую, что это связано не столько с libv8, сколько с therubyracer.

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

gem install therubyracer

затем запустите пакетную установку. Я надеюсь, что это работает для вас тоже.


0

У меня также были проблемы с использованием libv8и mini_racer. Решил проблему с

brew install v8

bundle update libv8 mini_racer

Использование последних версий mini_racer 0.2.10и libv8 7.3.492.27работает как шарм.


0

Я попробовал следующие команды на моем локальном, он работал нормально:

brew install v8@3.15
gem install libv8 -v 'YOUR_VERSION' -- --with-system-v8
gem install therubyracer -v 'YOUR_VERSION' -- --with-v8-dir=/usr/local/opt/v8@3.15
bundle install
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.