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.
