ruby on rails 3.1 - ExecJS en kon geen JavaScript-runtime vinden
Ik probeer de Mongoid/Devise Rails 3.1-sjabloon (Mongoid en Devise) te gebruiken, en ik blijf een foutmelding krijgen dat ExecJS geen JavaScript-runtime kan vinden. Begrijpelijk toen ik er geen had geïnstalleerd, maar ik heb geprobeerd Node.js, Mustang en de Ruby Racer te installeren, maar niets werkt.
Ik kon geen JavaScript-runtime vinden. Zie sstephenson/ExecJS (GitHub) voor een lijst van beschikbare runtimes (ExecJS::RuntimeUnavailable).
Wat moet ik doen om dit werkend te krijgen?
Antwoord #1
Ubuntu-gebruikers
Ik gebruik Ubuntu 11.04 en had vergelijkbare problemen. Het installeren van Node.js heeft het opgelost.
Vanaf Ubuntu 13.04 x64 hoeft u alleen het volgende uit te voeren:
sudo apt-get install nodejs
Dit zal het probleem oplossen.
CentOS/RedHat-gebruikers
sudo yum install nodejs
Antwoord #2
Voeg gewoon ExecJS en de Ruby Racer toe aan je gem-bestand en voer daarna bundle install uit.
gem 'execjs'
gem 'therubyracer'
Alles zou daarna goed moeten zijn.
Antwoord #3
Schrijf in je Gem-bestand
gem 'execjs'
gem 'therubyracer'
en dan rennen
bundle install
Alles werkt prima voor mij :)
Antwoord #4
Ik had een vergelijkbaar probleem: mijn Rails 3.1-app werkte goed op Windows, maar kreeg dezelfde fout als de OP bij het draaien op Linux. De oplossing die voor mij op beide platforms werkte, was het volgende toevoegen aan mijn Gemfile:
gem 'therubyracer', :platforms => :ruby
De truc is te weten dat :platforms => :ruby eigenlijk betekent gebruik deze gem alleen met "C Ruby (MRI) of Rubinius, maar NIET Windows."
Andere mogelijke waarden voor :platforms worden beschreven in de bundler man-pagina.
Ter informatie: Windows heeft een ingebouwde JavaScript-engine die execjs kan vinden. Op Linux is er geen ingebouwde, hoewel er verschillende beschikbaar zijn die men kan installeren. therubyracer is er een van. Andere worden vermeld in de execjs README.md.
Antwoord #5
Het toevoegen van de volgende gem aan mijn Gemfile loste het probleem op:
gem 'therubyracer'
Bundel dan je nieuwe afhankelijkheden:
bundle install
Antwoord #6
Een alternatieve manier is om gewoon te bundelen zonder de gem-groep die de dingen bevat die je niet hebt.
Doe dat ook:
bundle install --without assets
je hoeft het Gemfile helemaal niet aan te passen, mits je natuurlijk geen asset chain-dingen doet - wat meestal van toepassing is in niet-ontwikkelomgevingen. Bundle zal je '--without'-instelling onthouden in het .bundle/config-bestand.
