ruby on rails 3.1 - ExecJS e não foi possível encontrar um ambiente de execução JavaScript


Estou a tentar usar o template Mongoid/Devise para Rails 3.1 (Mongoid e Devise), e continuo a receber um erro a indicar que o ExecJS não consegue encontrar um runtime JavaScript. Justo quando não tinha nenhum instalado, mas já tentei instalar o Node.js, o Mustang e o Ruby Racer, mas nada está a funcionar.

Não consegui encontrar um ambiente de execução JavaScript. Veja sstephenson/ExecJS (GitHub) para uma lista de ambientes de execução disponíveis (ExecJS::RuntimeUnavailable).

O que preciso fazer para que isto funcione?

Resposta #1

Utilizadores de Ubuntu

Estou no Ubuntu 11.04 e tive problemas semelhantes. Instalar o Node.js resolveu.

A partir do Ubuntu 13.04 x64, só precisa de executar:

sudo apt-get install nodejs

Isto vai resolver o problema.

Utilizadores de CentOS/RedHat

sudo yum install nodejs

Resposta #2

Basta adicionar ExecJS e Ruby Racer no seu ficheiro de gemas e depois executar bundle install.

gem 'execjs'

gem 'therubyracer'

Tudo estará bem depois.

Resposta #3

No seu ficheiro Gem, escreva

gem 'execjs'
gem 'therubyracer'

e depois corre

bundle install

Está tudo a funcionar bem para mim :)

Resposta #4

Tive um problema semelhante: a minha aplicação Rails 3.1 funcionava bem no Windows, mas apresentava o mesmo erro que o OP ao correr no Linux. A solução que funcionou para mim em ambas as plataformas foi adicionar o seguinte ao meu Gemfile:

gem 'therubyracer', :platforms => :ruby

O truque é saber que :platforms => :ruby na verdade significa usar este gem apenas com "C Ruby (MRI) ou Rubinius, mas NÃO no Windows."

Outros valores possíveis para :platforms estão descritos na página do manual do bundler.

Para sua informação: o Windows tem um motor JavaScript incorporado que o execjs consegue localizar. No Linux não existe um incorporado, embora haja vários disponíveis que se podem instalar. O therubyracer é um deles. Outros estão listados no execjs README.md.

Resposta #5

Adicionar a seguinte gem ao meu Gemfile resolveu o problema:

gem 'therubyracer'

Depois, agrupe as suas novas dependências:

bundle install

Resposta #6

Uma alternativa é simplesmente fazer o bundle sem o grupo de gems que contém as coisas que você não tem.

Também eu:

bundle install --without assets

não precisa de modificar o Gemfile de forma alguma, desde que, claro, não esteja a fazer coisas com cadeias de assets - o que normalmente se aplica em ambientes que não são de desenvolvimento. O Bundle vai lembrar a sua configuração '--without' no ficheiro .bundle/config.