execJs: „Nie można znaleźć środowiska uruchomieniowego JavaScript”, ale execjs ORAZ termubyracer znajdują się w Gemfile

191

Otrzymuję ten błąd:

prowizja przerwana! Nie można znaleźć środowiska wykonawczego JavaScript. Zobacz https://github.com/sstephenson/execjs ,

Spędziłem już więcej godzin na wyszukiwaniu w Google, niż jestem skłonny przyznać. Uważam, że jest to błąd execJs.

Ze wszystkich postów jest to bardzo częsty problem z szynami 3.1. Środowisko wykonawcze js jest teraz potrzebne przez standardowe klejnoty, takie jak skrypt do kawy i sass.

Większość tych przypadków rozwiązano przez dodanie klejnotów „execjs” i „therubyracer” do aplikacji Gemfile, a następnie uruchomienie „aktualizacji pakietu” i / lub „instalacji pakietu”. Ale nie dla mnie.

Chyba mam szczęście. Używam szyn 3.1.3 / Ruby 1.9 na starej wersji Redhat Linux 4 (2.6.9-101.ELsmp), a gcc to 3.4.6.

Inne zgłoszone poprawki nie pomagają, nie mogę zainstalować „nodejs”, „johnson” lub „mustang”, inne pliki wykonawcze środowiska wykonawczego powinny zlokalizować i użyć. Nie będą tworzyć / instalować w moim systemie.

Muszę rozwiązać problem powodujący, że execJs nie mogą znaleźć „therubyracer”. Oto Gemfile (i instalacja pakietu mówi Ok):

source 'http://rubygems.org'

gem 'rails', '3.1.3'
gem 'sqlite3'
gem 'sho-mongrel'

gem 'execjs'
gem 'therubyracer'
#gem "therubyracer", :require => 'v8'

group :assets do
  gem 'sass-rails',   '~> 3.1.5'
  gem 'coffee-rails', '~> 3.1.1'
  gem 'uglifier', '>= 1.0.3'
end

A oto ślad:

~/rails/316-private-pub/chatter-after>rake db:create --trace
rake aborted!
Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes.
/usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs/runtimes.rb:50:in `autodetect'
/usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs.rb:5:in `<module:ExecJS>'
/usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs.rb:4:in `<top (required)>'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `each'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `block in require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `each'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:122:in `require'
/home/vitalarthur/rails/316-private-pub/chatter-after/config/application.rb:7:in `<top (required)>'
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
/home/vitalarthur/rails/316-private-pub/chatter-after/Rakefile:5:in `<top (required)>'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:501:in `raw_load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:82:in `block in load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:81:in `load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:65:in `block in run'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>'
/usr/local/bin/rake:19:in `load'
/usr/local/bin/rake:19:in `<main>'

W dzienniku rozwoju nie ma nic interesującego.

Oto katalog execjs:

/usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs>ls
disabled_runtime.rb  module.rb              ruby_rhino_runtime.rb  version.rb
external_runtime.rb  mustang_runtime.rb     runtimes.rb
johnson_runtime.rb   ruby_racer_runtime.rb  

Próbowałem także execjs-1.2.13. Taki sam problem.

Jeśli skomentuję poniżej plik execjs.rb, mogę uruchomić prowizję bez błędu:

require "execjs/module"
require "execjs/runtimes"

module ExecJS
  self.runtime #||= Runtimes.autodetect
end

Ale wtedy nie dostaję środowiska uruchomieniowego.

Widzę, skąd pochodzi tekst błędu w runtimes.rb:

def self.autodetect
  from_environment || best_available ||
    raise(RuntimeUnavailable, "Could not find a JavaScript runtime. " +
      "See https://github.com/sstephenson/execjs for a list of available runtimes.")
end

Pytanie brzmi: skoro mam zainstalowany program „therubyracer”, dlaczego runtimes.rb nie może go znaleźć? Czy execJs jest zepsuty?

Oto „termubirator”:

/usr/local/lib/ruby/gems/1.9.1/gems/therubyracer-0.9.9

Jak mogę to naprawić?

steve98177
źródło

Odpowiedzi:

346

Użytkownicy Ubuntu:

Miałem ten sam problem i naprawiłem go, instalując nodejsw moim systemie niezależnie od klejnotu.

na Ubuntu jego: sudo apt-get install nodejs

Używam 64-bitowego Ubuntu 11.10

aktualizacja: Z odpowiedzi @Galina poniżej domyślam się, że wymagana jest najnowsza wersja nodejs, więc @ steve98177 najlepszą opcją na polu redhat (lub CentOS) jest instalacja z kodu źródłowego tak, jak zrobiła to @Galina, ale tak jak ty nie możesz „zrobić / zainstalować” na tym polu? Sugeruję, aby spróbować zainstalować fedora rpm (długi strzał) https://github.com/joyent/node/wiki/Installing-Node.js-via-package- zarządzaj lub znajdź inne pole RH / CentOs (które możesz „zrobić”) i utwórz własne rpm i zainstaluj na oryginalnym polu RH (jeśli stary glibc na RH gra ładnie).

Prawdziwym problemem tutaj (IMHO) jest instalacja Klejnotów, które są zależne od zainstalowanych pakietów poza środowiskiem ruby, czy jest jakiś sposób, aby wiedzieć przed instalacją? RFI dla Gems lub bundler?


Użytkownicy CentOS / RedHat:

sudo yum install nodejs
Paul Williams
źródło
1
na Ubuntu musiałem sudo apt-get update, a następnie instalacja nodejs działała.
Vineet Bhatia
Miałem ten sam problem na moim Ubuntu 12.04- 32-bitowym z Ruby 1.9.3p392, szynami 3.2.3, gem 1.8.25. Otrzymywał ten sam błąd podczas uruchamiania „konsoli skryptu / railsów” i „serwera skryptów / railsów”. sudo apt-get install nodejsrozwiązałem mój problem.
ajin6747
Czy to jednak musi być Węzeł? Jestem pewien, że możesz używać innych, takich jak therubyracer, therubyrhino lub Apple JavaScriptCore. Wiem, że ExecJS je obsługuje. github.com/sstephenson/execjs
Dustin Griffith
Próba zainstalowania klejnotu w dowolnym alternatywnym środowisku uruchomieniowym obsługiwanym przez execjs nie doprowadziła mnie nigdzie. w rzeczy samej, instalacja nodejs działała. Daleki od ideału, ale pozwala ci przejść obok postu.
Mitch Kent,
Używam Ubuntu 14.04. Problem rozwiązany po instalacji nodejs.
Charles Wu
108

W swoim pliku gem dodaj:

gem 'execjs'
gem 'therubyracer', :platforms => :ruby

Aby uzyskać więcej informacji: ExecJS i nie można znaleźć środowiska wykonawczego JavaScript

Tiago
źródło
1
Dzięki, ale to nie działa. Spójrz na tę próbę rozpoznania rubyrhino przez execjs: gem which rhino /usr/local/lib/ruby/gems/1.9.1/gems/therubyrhino-1.73.1/lib/rhino.rb
steve98177 10.02
Dla mnie też zadziałała uwaga dla początkujących użytkowników takich jak ja: Gemfile znajduje się w folderze projektu.
McSas,
1
Dla tych z was, dla których to nie zadziałało: spróbuj uruchomić gem install therubyracernajpierw.
maksimov
Wszystkim innym, którzy mieli ten problem, instalowałem dashing Shopify w systemie CentOS 5.8 i miałem problem z uruchomieniem execjs. Dodałem to do mojego Gemfilei zadziałało.
Casey
Ok, działa. Ale dlaczego musimy to zrobić? Za każdym razem, gdy dodam linię do mojego pliku Gemfile, musi to mieć sens w przypadku projektów osobistych, a w przypadku projektów zespołowych jest to jeszcze trudniejsze, ponieważ ma to wpływ na maszyny innych, podczas gdy problem dotyczył środowiska. IMHO to niezbyt przyzwoite rozwiązanie na dłuższą metę.
Augustin Riedinger
13

Kiedy tworzysz pusty projekt, ten wiersz jest komentowany w Gemfile. Po prostu odkomentuj i dołącz!

gem 'therubyracer', :platforms => :ruby
Santhosh
źródło
2
... i pakiet! To zdecydowanie najłatwiejsza odpowiedź.
etusm
4

Używam Ubuntu 11.10- 32 bit z Ruby 1.9.3p194, Rails 3.2.3, Gem 1.8.24. Otrzymywał ten sam błąd JavaScript podczas uruchamiania „konsoli skryptów / szyn”.

Jednak wykonanie „sudo apt-get install nodejs” rozwiązało mój problem.

Vibin B. Nair
źródło
4

Użytkownicy Fedory NIE BĘDĄ mogli wykonać prostego „yum install nodejs” z powodu poważnych konfliktów nazw i plików, które uniemożliwiają dostęp do tego pakietu nawet za pośrednictwem repozytoriów Fedory.

Najwyraźniej dostępne jest co najmniej jedno alternatywne repozytorium z alternatywną kompilacją, które może działać, ale to dwie zbyt wiele „alternatywnych”, bym mógł z nich skorzystać - szukam innej alternatywy.

Matt Heck
źródło
W tym czasie mogło to być prawdą, ale teraz działa dobrze (grudzień 2015)
Mitch Kent
4

Jeśli byłeś na Ubuntu $ sudo apt-get install nodejs

Staraj się nie używać innych systemów, takich jak Windows, do programowania. Pomyśl, że prawie wszystkie serwery na świecie są serwerami Linux, więc kiedy spróbujesz wdrożyć tę aplikację, będzie łatwiej, jeśli opracujesz ją również w środowisku Linux lub Unix.

Julian Arango López
źródło
3

Miałem ten sam problem na serwerze pomostowym. Nie miałem problemów z uruchomieniem zadań prowizji na moim lokalnym komputerze programistycznym, ale wdrożenie nie powiodło się na serwerze pomostowym z komunikatem o błędzie „Nie można znaleźć środowiska wykonawczego JavaScript” podczas próby uruchomienia zasobów: prekompilacja zadanie prowizji .

Oczywiście therubyracer i execjs były w moim Gemfile, a ja korzystałem z najnowszych wersji. Moje pliki Gemfile.lock pasują do siebie, a następnie zweryfikowałem wersje, uruchamiając program pakujący .

Po wyszukiwaniu w Google skończyłem z usuwaniem wszystkich klejnotów i ponownym ich instalowaniem co naprawiło problem. Nadal nie wiem, co było przyczyną, ale może to ci pomoże.

Oto jak wygląda moje środowisko, BTW:

Ubuntu 10.04.3 LTS
rbenv
Ruby 1.9.2-p290
bundler-1.0.21
execjs-1.3.0
therubyracer-0.9.9
TheSpend
źródło
Mam ten problem na Ubuntu 10.04. Nie sądziłem, że warto wybrać Ubuntu 12.04, ale chyba tak jest! Myślę więc, że w moim przypadku problemem jest to, że skompilowałem i przekompilowałem mój rubin (1.9.3, 1.9.2) zbyt wiele razy. Ponownie kompiluję go, aby zobaczyć, czy to rozwiązuje problem. Aha i aktualizuję apt-get do najnowszej wersji.
Victor Pudeyev,
3

Miałem ten sam problem. Dodanie klejnotów „execjs” i „therubyracer” nie działa dla mnie. apt-get install nodejs - również nie działa. Używam 64-bitowego Ubuntu 10.04.

Ale pomogło mi to: 1. Utworzyłem pusty folder (na przykład „java”). 2. Z terminalu w folderze, który utworzyłem:

$ git clone git://github.com/ry/node.git
$ cd node
$ ./configure
$ make
$ sudo make install

Następnie uruchamiam „instalację pakietu” jak zwykle (z folderu z projektem Ruby & Rails). Problem został rozwiązany. Ruby nie musiał ponownie instalować.

Galina
źródło
każdy, kto spróbuje tego teraz, otrzyma błąd. spróbuj użyć git clone github.com/nodejs/node
Yeasin Ar Rahman
2

Zdarzyło mi się to na moim komputerze z systemem Windows, okazało się, że problem był zupełnie inny. Przypadkowo usunąłem niektóre ścieżki z mojej %PATH%zmiennej. Ponowne uruchomienie wiersza polecenia rozwiązało to. Wygląda na to, że na jednej z brakujących ścieżek było środowisko wykonawcze JS.

Godwin
źródło
również zdarzyło mi się usunąć jakąś ścieżkę z mojego komputera z systemem Windows, czy mógłbyś wspomnieć, jak dodałeś ścieżkę js
Hussain Akhtar Wahid „Ghouri”
@HussainAkhtarWahid, nie nadpisałem mojego autoexec ani niczego takiego, więc wszystko, co musiałem zrobić, to zamknąć moją sesję cmd i ponownie ją otworzyć.
Godwin,
Dobra robota, to był mój problem po próbie skonfigurowania wszystkiego, co jest wymagane do środowiska programowania Ruby Windows
HostMyBus
2

Kilka razy wyciągnąłem włosy z tym błędem. Udało mi się sprawić, że kiedyś zniknie, uruchamiając ponownie Apache / Nginx.

Naprawiłem to w ten sam sposób, jak powyżej, dodając następujące elementy do pliku GEM:

gem 'execjs'
gem 'therubyracer', :platforms => :ruby

a następnie usunąłem mój plik gemfile.lock, a następnie ponownie napisałem „instalacja pakietu”. Dopiero wtedy odkryłem, że „instalacja pakietu” faktycznie zainstalowała prawidłowe biblioteki itp.

LorneCurrie
źródło
1

Na Ubuntu musiałem, sudo apt-get updatea następnie instalacja nodejs działała.

kilombo1
źródło
1

kiedy generuję kontroler g szyn, dostałem ten sam błąd. Potem, kiedy dokonam następujących zmian w Gemfile (w szynach 4) wszystko poszło gładko. Zmiany, które wprowadziłem, były

gem „execjs”
gem ”therubyracer”, „0.11.4”
Następnie mogę uruchomić serwer i wykonać wszystkie podstawowe operacje na aplikacji.

Madhan Ayyasamy
źródło
0

dodaj swój plik gem, który znajduje się w utworzonym folderze: gem „execjs” gem ”therubyracer”

Wisznu Harish
źródło
0

W moim przypadku wykonanie bundlepolecenia załatwiło sprawę . Ufam, że się wtedy odnajdą.

javabeangrinder
źródło
0

Miałem ten problem podczas korzystania z RubyMine (6.3.3). Pewnego dnia próbowałem uruchomić kod, ale nie zadziałał i narzekałem na brak środowiska wykonawczego JavaScript. Byłem jednak w stanie biec rails s. Dla mnie poprawką było utworzenie nowej konfiguracji Run. Wydaje się naprawdę dziwne, że konfiguracja Run zostałaby uszkodzona.

Jacek
źródło