"gem install therubyracer" nie działa na Mac OS X Lion

Będę wdzięczny za pomoc w podjęciu pracy. Oto błąd:

$ 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)

Oto kilka godnych uwagi kroków, które wykonałem przed błędem. Działały dobrze:

$ gem install libv8
$ brew install v8

Moje środowisko to:

  • Mac OS X Lion 10.7.4
  • ruby 1.9.3p194 (2012-04-20 wersja 35410) [x86_64-darwin11.4.0] (via RVM)
  • V8 wersja 3.9.24 (via homebrew)
Author: David J., 2012-06-05

11 answers

To mi pomogło:

$ gem uninstall libv8
$ gem install therubyracer

(wielkie podziękowania dla http://www.ruby-forum.com/topic/4306127 )

 106
Author: David J.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-05 22:28:52
gem uninstall libv8
brew install v8
gem install therubyracer
 43
Author: Ken Mazaika,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-17 23:31:34

Ale dlaczego tak się dzieje? I dlaczego odinstalowanie libv8 i ponowna instalacja therubyracer rozwiązuje problem?

Odpowiedź znajduje się na dole Komunikatu o błędzie (z oryginalnego postu). Ignoruj rzeczy o

probably lack of necessary libraries and/or headers

Jest to błędne założenie tego, kto napisał ten Komunikat o błędzie. Na dole widzisz co Ruby ma do powiedzenia na ten temat:

undefined method `include_path' for Libv8:Module

W moim przypadku próbowałem zainstalować therubyracer-0.9.8 z bundle install i z jakiegoś powodu próbował użyć mojej kopii z libv8-3.11.8.13, który został zainstalowany w pewnym momencie, prawdopodobnie jako zależność od jakiegoś innego klejnotu.

Nie wiem, dlaczego próbował użyć nowszej wersji, ponieważ therubyracer.gemspec zawiera s.add_dependency "libv8", "~> 3.3.10". A mój Gemfile.lock mówi, żeby użyć libv8 (3.3.10.2). Ale niestety tak właśnie było.

I to prawda, że Libv8:Module czy Nie ma metodę include_path W libv8-3.11.8.13, ale robi W libv8-3.3.10.2

Dlatego Odinstaluj wszystkie swoich wersji libv8, a następnie ponowne zainstalowanie therubyracer działa. Ponieważ wszystkie wersje libv8 że nie mają metoda include_path są całkowicie usunięte, a libv8że mA metoda include ścieżka jest reinstalowana po ponownej instalacji therubyracer.

 40
Author: Mars Redwyne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-24 16:09:31

Biorąc pod uwagę brak, jeśli powyższe działa dla mnie w 100%, pomyślałem, że opublikuję to, co zrobiłem (w ramach projektu rails):

gem uninstall libv8
bundle update therubyracer

To upewniło mnie, że otrzymałem najnowszą therubyracer, a także nowszą wersję libV8, i wydaje się naprawiać wiele problemów, które dotykałem, z braku libv8.plików, do niezdefiniowanych metod.

 15
Author: Abe Petrillo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-03 14:53:11

W końcu używam therubyracer 0.11. 0beta5 jako rozwiązania.

Za pomocą therubyracer (0.11. 0beta5)

Dodaj following on Gemfile

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

Then bundle install

Mac OSX 10.8 Moutain Lion

 12
Author: szpapas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-29 08:02:14

Jeśli potrzebujesz 0.11.3 i nie działa daj temu szansę na 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
[[4]} Zobacz ten numer Po Więcej Szczegółów.

Prawdopodobnie nie potrzebujesz -- --with-system-v8 w ostatniej linii, ale zrobiłem to dla bezpieczeństwa, ponieważ zobaczyłem, że zaczyna działać Fetching: libv8-3.11.8.17-x86_64-darwin-13.gem (1%) Kiedy uruchomiłem komendę...

W każdym razie, to działało dla mnie, kiedy wszystkie inne rzeczy nie.
 10
Author: cwd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-28 07:33:42

Dla każdego, kto napotkał ten problem na Mac OSX 10.8 Mountain Lion podczas próby uaktualnienia swojego Gemfile z gem 'therubyracer', '0.11.0', po prostu aktualizacja systemu libv8 gem zadziałała dla mnie (NIE odinstaluj żadnego innego gem):

$ gem update libv8
$ bundle install

Edytuj

Jeśli używasz Travis-CI (lub innych narzędzi CI znajdujących się na innych serwerach, zakładam), będziesz musiał wyraźnie dodać libv8 gem do swojego Gemfile jako cóż:

Gemfile

gem 'libv8', '3.11.8.3'

Potem bundle install Jak zwykle. Zauważ, że instalacja libv8 może zająć sporo czasu i zauważyłem, że może to być przyczyną przekroczenia limitu czasu Travis CI, powodując awarię Twojej kompilacji. Możesz to nieco złagodzić, Nie włączając klejnotów środowiska programistycznego do swoich kompilacji: {]}

.travis.yml

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

Update

Tak, prawie wszystkie moje budowle Travis timeout I fail z tego powodu. Jeśli ktoś zna sposób na rozwiązanie tego problemu (mam nadzieję, że " downgrade therubyracer" jest ostatecznością), proszę zostawić komentarz!

Update 2

To może nie działać dla wszystkich aplikacji, ale wydaje się, że moje aplikacje Rails 3.2.9 w rzeczywistości nie potrzebowały therubyracer lub libv8. Po usunięciu tych klejnotów z mojego Gemfile , potwierdziłem, że moje specyfikacje przeszły, ponownie pchnąłem do Travisa i udało się je zbudować. Czyli chyba pozbycie się tych klejnotów (jeśli jesteś Nie wiem, czy rzeczywiście ich potrzebujesz) jest przynajmniej warte wypróbowania.

Update 3

Podziękowania dla Paul Annesley za potwierdzenie, że jeśli jesteś na Mac OS X 10.8 Mountain Lion, nie potrzebujesz therubyracer gem w ogóle, ponieważ system jest już dostarczany z Apple JavaScriptCore, własnym Javascript runner. W czasie oryginalnej odpowiedzi byłem na Snow Leopardzie i dlatego go potrzebowałem.

 7
Author: Paul Fioravanti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:00

Dla mnie usunięcie Gemfile.lock file and running bundle install worked it ' s magic.

 4
Author: Alex Weber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-19 04:59:28

OSX 10.8.2, ruby 1.9.3p125

Żadne z powyższych nie zadziałało... Miałem dość szukania odpowiedniego klejnotu dla mojego środowiska, więc po prostu połączyłem się z celem g++, którego tego brakowało: {]}
sudo ln -s `which g++` /usr/bin/g++-4.2

Nie tak pomocny dla zdalnych wdrożeń, ale wykonaj zadanie na mojej stacji roboczej.

 3
Author: Colby Blair,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-08 04:21:33

Mam podobny problem, ale narzekał też na to, że nie znalazłem g++-4.2. I did have Xcode command line tools installed, but it was looking for / usr / bin / g++-4.2, I had g++ (który był dowiązaniem symbolicznym wskazującym na llvm-g++-4.2). W każdym razie, właśnie stworzyłem dowiązanie symboliczne do g++ i próbowałem ponownie zainstalować pakiet... zadziałało!

$ cd /usr/bin

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

 1
Author: richardun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-19 18:10:06

Miał ten sam błąd, to działało dla mnie:

  1. Z konsoli: gem uninstall libv8

  2. W Twoim Gemfile dodaj:

    gem 'therubyracer', :platforms => :ruby, :require => 'v8'
    gem 'libv8', '~> 3.11.8'  # Update version number as needed
    
  3. Z konsoli: bundle install

Jeśli byłeś w trakcie ulepszania klejnotu therubyracer, możesz uruchomić bundle update therubyracer również po tym. (Rozważ podanie numeru wersji)

To było na Mac 10.6 (Snow Leopard).
 0
Author: michaeldwp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-07 01:05:52