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?


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

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.


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


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 .


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

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.


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


6

Para amazon linux (AMI):

sudo yum install nodejs npm --enablerepo=epel

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 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.


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.



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.


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. :)


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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.