ExecJS e não foi possível encontrar um tempo de execução JavaScript

403

Estou tentando usar o modelo Mongoid / Devise Rails 3.1 ( Mongoid e Devise ) e continuo recebendo um erro informando que o ExecJS não pode encontrar um tempo de execução JavaScript. É justo o suficiente quando eu não tenho nenhum instalado, mas tentei instalar o Node.js , o Mustang e o Ruby Racer , mas nada está funcionando.

Não foi possível encontrar um tempo de execução JavaScript. Consulte sstephenson / ExecJS (GitHub) para obter uma lista dos tempos de execução disponíveis ( ExecJS::RuntimeUnavailable).

O que preciso fazer para que isso funcione?

srboisvert
fonte
4
btw - Estou usando o ubuntu karmic.
srboisvert
Você realmente deve considerar mudar a resposta. A resposta do Node.js não é tão boa quanto a do executjs / rubyracer.
quer
3
O rubyracer tem outros problemas. Heroku não recomenda mais incluí-lo no seu Gemfile se você puder evitá-lo. devcenter.heroku.com/articles/rails-asset-pipeline#therubyracer Eu acho que instalar um tempo de execução Javascript adequado no Ubuntu é a resposta correta para esta pergunta.
27613 Scott M. Ford

Respostas:

436

Usuários do Ubuntu

Estou no Ubuntu 11.04 e tive problemas semelhantes. A instalação do Node.js foi corrigida.

No Ubuntu 13.04 x64, você só precisa executar:

sudo apt-get install nodejs

Isto resolverá o problema.


Usuários do CentOS / RedHat

sudo yum install nodejs
eldewall
fonte
11
tentei. sem sorte Gostaria de saber se é um conflito rvm ou algo assim. Tudo o que outras pessoas sugeriram não funcionou para mim.
srboisvert
76
gem 'execjs' gem 'therubyracer' é uma solução melhor que esta.
dwaynemac
26
Heroku agora está desencorajando fortemente o hidrocirrador devido ao uso de memória. Instalei o nodejs na minha máquina de desenvolvimento de acordo com esta resposta e tirei o therubyracer do meu gemfile. Consulte também stackoverflow.com/questions/7092107/… .
Mark Berry
11
@dwaynemac Eu discordo. Prefiro que o tempo de execução exista como uma biblioteca do sistema operacional (como no Mac e Windows por padrão), em vez de adicionar mais uma gema à lista de dependências.
William Denniss
11
Parece que therubyracer e execjs estão causando problemas com a implantação do heroku, a menos que haja algo que foi modificado que eu perdi. Esta é a solução preferida.
Sturm
445

Basta adicionar o ExecJS e o Ruby Racer no seu arquivo gem e executar bundle installdepois.

gem 'execjs'

gem 'therubyracer'

Tudo deve ficar bem depois.

vincent jacquel
fonte
6
Isso funcionou para mim, rails 3.1rc4 e Ubuntu 11.04 (minha primeira tentativa com o rails 3.1). Eu estava tentando gerar um andaime quando recebi o erro. Ainda muito manco que o trilhos 3.1 é "quebrado" fora da caixa.
wonderfulthunk
35
Para o Rails 3.1 RC 6, basta especificargem 'therubyracer'
Amree
5
Existe alguma maneira de incluir essas gemas no Gemfile padrão quando um novo aplicativo é criado?
Richard Fawcett
2
esta é uma solução melhor do que instalar o node.js. Se você estiver implantando em um servidor remoto ou compartilhando o aplicativo com outros desenvolvedores, é necessário que todos instalem o node.js.
Jdkealy 29/10
19
Heroku agora está desencorajando fortemente o hidrocirrador devido ao uso de memória. Instalei o nodejs na minha máquina dev ( github.com/joyent/node/wiki/… ) e tirei o therubyracer do meu gemfile. Consulte também stackoverflow.com/questions/7092107/… .
Mark Berry
77

No seu arquivo Gem, escreva

gem 'execjs'
gem 'therubyracer'

e depois corra

bundle install

Tudo funciona bem para mim :)

manish nautiyal
fonte
9
Você não precisa adicionar 'execjs'
miguelSantirso
Sim ur direito em trilhos 3.2.1 você tem que usar somente gem'therubyracer'
Manish Nautiyal
Obrigado @manish nautiyal e @ Peter Mortensen. ele trabalha para mim
Ravindra
48

Eu tive um problema semelhante: meu aplicativo Rails 3.1 funcionou bem no Windows, mas obteve o mesmo erro do OP ao executar no Linux. A correção que funcionou para mim nas duas plataformas foi adicionar o seguinte ao meu Gemfile:

gem 'therubyracer', :platforms => :ruby

O truque é saber que, :platforms => :rubyna verdade, significa usar apenas essa gema com "C Ruby (MRI) ou Rubinius, mas NÃO com o Windows".

Outros valores possíveis para :platformssão descritos na bundlerpágina do homem .

FYI: O Windows possui um mecanismo JavaScript embutido que execjspode ser localizado. No Linux, não há um built-in, embora haja vários disponíveis que podem ser instalados. therubyraceré um deles. Outros estão listados no execjs arquivo README.md .

jwfearn
fonte
Obrigado, este corrigiu para mim no Ubuntu Oneiric usando a instalação rvm do ruby ​​1.9.3 e Rails 3.2.1
Yashima
Muito obrigado senhor!
DaTroop
Eu encontrei o erro em um servidor CentOS com o node.js instalado. Isso me fez passar por isso. Obrigado!
Ncherro
36

A adição da seguinte jóia ao meu Gemfile resolveu o problema:

gem 'therubyracer'

Em seguida, agrupe suas novas dependências:

$ bundle install
JDutil
fonte
também adicione gem 'execjs' em Gemfile
Bijendra
6
execjs já está incluído no rails agora. Isso também foi exigido apenas durante os candidatos a liberação.
JDutil
16

Uma maneira alternativa é apenas agrupar sem o grupo de gemas que contém as coisas que você não possui.

Então faz:

bundle install --without assets

você não precisa modificar o Gemfile, desde que, obviamente, você não esteja fazendo coisas da cadeia de ativos - o que geralmente se aplica a ambientes que não são de desenvolvimento. O pacote lembrará sua configuração '--without' no arquivo .bundle / config.

moschops
fonte
Melhor resposta. Trabalhou por trilhos versão 3.2.3
Frantzdy Romain
11
Isso é ótimo, e uma correção tão simples. O site Heroku diz que o RubyRacer não é mais necessário (com pilha Cedar), então fiquei perplexo com o motivo de repente meu programa não estar sendo executado localmente. Isso fez o truque.
Mike Blyth
6

Adicione as seguintes jóias no seu arquivo gem

gem 'therubyracer'
gem 'execjs'

e corra

bundle install

você terminou :)

Ramiz Raja
fonte
6

Para amazon linux (AMI):

sudo yum install nodejs npm --enablerepo=epel
William Hu
fonte
11
Obrigado, isso deve estar em um nível mais alto
David Mauricio
isso foi essencial para que uma implantação de capistrano funcionasse na distribuição linux padrão da AWS.
Jjk
4

Eu costumava adicionar o Ruby Racer ao arquivo Gem para corrigi-lo. Mas ei, o Node.js funciona!

Richard Zhang
fonte
como você adiciona nodejs ao gemfile? Não encontrei uma jóia do nodejs.
Papouche Guinslyzinho 28/02
4

Eu tive esse mesmo erro, mas apenas no meu servidor intermediário, não no meu ambiente de produção. O nodejs já estava instalado nos dois ambientes.

Digitando:

which node

Descobri que o comando do nó estava localizado em: / usr / bin / node na produção, mas: / usr / local / bin / node na preparação.

Depois de criar um link simbólico na preparação, ou seja:

sudo ln -s /usr/local/bin/node /usr/bin/node

o aplicativo trabalhou na preparação.

Sem confusão, sem confusão.

Sean
fonte
funciona como charme! Um conselho: eu precisava fazer link simbólico para nodejstambém
Rafael Gomes Francisco
3

Não use RubyRacer, pois é ruim na memória. Instalar o Node.js, conforme sugerido por algumas pessoas aqui, é uma ideia melhor.

Esta lista de tempos de execução disponíveis que podem ser usados ​​pela ExecJs Library também documenta o uso do Node.js

https://github.com/sstephenson/execjs

Portanto, o Node.js não é um exagero e é uma solução muito melhor do que usar o RubyRacer.

Nervo
fonte
0

Comecei a ter esse problema quando comecei a usar o rbenv com o Ruby 1.9.3, onde, como no sistema, o ruby ​​é 1.8.7. A gema é instalada nos dois lugares, mas por alguma razão o script rails não a pegou. Mas adicionar o "execjs" e o "therubyracer" ao Gemfile fez o truque.

arangamani
fonte
0

No seu arquivo gem Remova o comentário desta linha.

19 # gem 'therubyracer', plataformas:: ruby

E execute a instalação do pacote

Você está pronto para trabalhar. :)

Sandeep Roniyaar
fonte
0

Tentativa de depuração no RubyMine usando o Ubuntu 18.04, Ruby 2.6. *, Rails 5 e RubyMine 2019.1.1 , encontrei o mesmo problema.

Para resolver o problema, tirei o comentário da mini_racerlinha da minha Gemfilee executei bundle:

# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'mini_racer', platforms: :ruby

Mudar para:

# See https://github.com/rails/execjs#readme for more supported runtimes
gem 'mini_racer', platforms: :ruby
CommandZ
fonte
0

Eu instalei nodevia nvm e encontrei esse problema ao implantar com o Capistrano. O Capistrano não carregou o nvm automaticamente porque é executado de maneira não interativa.

Para corrigir, basta mover as linhas que a nvm adiciona ao seu ~/.bashrctopo. O arquivo será mais ou menos assim:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac
Kevin Cooper
fonte