execJs: 'Não foi possível encontrar um tempo de execução JavaScript', mas execjs AND therubyracer estão no Gemfile

191

Estou recebendo este erro:

ancinho abortado! Não foi possível encontrar um tempo de execução JavaScript. Consulte https://github.com/sstephenson/execjs ,

Já passei mais horas pesquisando no google do que estou disposto a admitir. Eu acredito que este é um bug do execJs.

De todas as postagens, esse é um problema muito comum no rails 3.1. Um tempo de execução js agora é necessário pelo que agora são gemas padrão, como coffee-script e sass.

A maioria desses casos foi resolvida adicionando as gems 'execjs' e 'therubyracer' ao aplicativo Gemfile e, em seguida, executando 'bundle update' e / ou 'bundle install'. Mas não para mim.

Acho que tive sorte. Estou executando o rails 3.1.3 / ruby ​​1.9 em uma versão antiga do Redhat Linux 4 (2.6.9-101.ELsmp) e o gcc é 3.4.6.

Outras correções relatadas não ajudam, não consigo instalar 'nodejs', 'johnson' ou 'mustang'; os outros execJs de execução devem localizar e usar. Eles não farão / instalarão no meu sistema.

Preciso corrigir o problema que faz com que os execJs falhem ao localizar 'therubyracer'. Aqui está o Gemfile (e a instalação do pacote diz Ok):

source 'http://rubygems.org'

gem 'rails', '3.1.3'
gem 'sqlite3'
gem 'sho-mongrel'

gem 'execjs'
gem 'therubyracer'
#gem "therubyracer", :require => 'v8'

group :assets do
  gem 'sass-rails',   '~> 3.1.5'
  gem 'coffee-rails', '~> 3.1.1'
  gem 'uglifier', '>= 1.0.3'
end

E aqui está um traço:

~/rails/316-private-pub/chatter-after>rake db:create --trace
rake aborted!
Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes.
/usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs/runtimes.rb:50:in `autodetect'
/usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs.rb:5:in `<module:ExecJS>'
/usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs.rb:4:in `<top (required)>'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `each'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `block in require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `each'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:122:in `require'
/home/vitalarthur/rails/316-private-pub/chatter-after/config/application.rb:7:in `<top (required)>'
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
/home/vitalarthur/rails/316-private-pub/chatter-after/Rakefile:5:in `<top (required)>'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:501:in `raw_load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:82:in `block in load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:81:in `load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:65:in `block in run'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>'
/usr/local/bin/rake:19:in `load'
/usr/local/bin/rake:19:in `<main>'

Não há nada interessante no log de desenvolvimento.

Aqui está o diretório execjs:

/usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs>ls
disabled_runtime.rb  module.rb              ruby_rhino_runtime.rb  version.rb
external_runtime.rb  mustang_runtime.rb     runtimes.rb
johnson_runtime.rb   ruby_racer_runtime.rb  

Eu também tentei o execjs-1.2.13. Mesmo problema.

Se eu comentar execjs.rb abaixo, eu posso executar o rake sem o erro:

require "execjs/module"
require "execjs/runtimes"

module ExecJS
  self.runtime #||= Runtimes.autodetect
end

Mas então eu não tenho tempo de execução.

Eu posso ver de onde vem o texto do erro em runtimes.rb:

def self.autodetect
  from_environment || best_available ||
    raise(RuntimeUnavailable, "Could not find a JavaScript runtime. " +
      "See https://github.com/sstephenson/execjs for a list of available runtimes.")
end

Portanto, a pergunta é: como eu tenho o 'therubyracer' instalado, por que o runtimes.rb não pode encontrá-lo? Os execJs estão quebrados?

Aqui está 'therubyracer':

/usr/local/lib/ruby/gems/1.9.1/gems/therubyracer-0.9.9

Como posso consertar isso?

steve98177
fonte

Respostas:

346

Usuários do Ubuntu:

Eu tive o mesmo problema e o corrigi instalando nodejsno meu sistema independentemente da gema.

no ubuntu é: sudo apt-get install nodejs

Estou usando o ubuntu 11.10 de 64 bits

update: Da resposta da @Galina abaixo, acho que é necessária a versão mais recente do nodejs, então @ steve98177 sua melhor opção em uma caixa redhat (ou CentOS) é instalar a partir do código-fonte como a @Galina fez, mas como você não pode "fazer / instalar" nesta caixa?, sugiro que você tente instalar um rpm do fedora (long shot) https://github.com/joyent/node/wiki/Installing-Node.js-via-package- Gerente ou encontrar uma outra caixa de RH / CentOS (que você pode 'make' on) e criar seu próprio rpm e instalar em caixa de RH original (se velho glibc em RH joga bonito).

O verdadeiro problema aqui (IMHO) é instalar Gems que dependem de pacotes instalados fora do ambiente ruby. Existe uma maneira de saber antes de instalar? um RFI para Gems ou bundler?


Usuários do CentOS / RedHat:

sudo yum install nodejs
Paul Williams
fonte
1
no ubuntu eu tive que sudo apt-get update e então a instalação do nodejs funcionou.
Vineet Bhatia
Eu tive o mesmo problema no meu Ubuntu 12.04- 32 bits com ruby ​​1.9.3p392, rails 3.2.3, gem 1.8.25. Estava recebendo o mesmo erro ao executar "script / rails console" e "script / rails server". sudo apt-get install nodejsresolveu meu problema.
ajin6747
Mas tem que ser Nó? Tenho certeza de que você pode usar outras pessoas como therubyracer, therubyrhino ou Apple JavaScriptCore. Eu sei que o ExecJS os suporta. github.com/sstephenson/execjs
Dustin Griffith
A tentativa de instalar gem qualquer um dos tempos de execução alternativos suportados por execjs não me levou a lugar algum. de fato, a instalação do nodejs funcionou. Longe do ideal, mas você passa pelo post.
Mitch Kent
Eu uso o ubuntu 14.04. Problema resolvido após a instalação do nodejs.
Charles Wu
108

No seu gemfile, adicione:

gem 'execjs'
gem 'therubyracer', :platforms => :ruby

Para obter mais detalhes: ExecJS e não foi possível encontrar um tempo de execução JavaScript

Tiago
fonte
1
Obrigado, mas isso não funciona. Olhe para esta tentativa de obter o rubyrhino reconhecido pelo execjs: gem, que rhino /usr/local/lib/ruby/gems/1.9.1/gems/therubyrhino-1.73.1/lib/rhino.rb
steve98177
Também funcionou para mim, uma observação para iniciantes em trilhos como eu: o Gemfile está na pasta do projeto.
MCSAs
1
Para aqueles que não funcionaram: tente executar gem install therubyracerprimeiro.
Maksimov 01/12/12
Para qualquer outra pessoa com esse problema, eu estava instalando o projeto ousado do Shopify em um sistema CentOS 5.8 e estava executando o problema de tempo de execução execjs. Eu adicionei isso ao meu Gemfilee funcionou.
Casey
Ok, funciona, tudo bem. Mas por que temos que fazer isso? Toda vez que adiciono uma linha ao meu Gemfile, deve realmente fazer sentido para projetos pessoais e para projetos de equipe, é ainda mais sujo fazer isso, pois isso afeta as máquinas de outras pessoas enquanto o problema era específico do ambiente. IMHO que não é uma solução muito decente a longo prazo.
Augustin Riedinger
13

Quando você cria um projeto vazio, essa linha é comentada no Gemfile. Apenas descomente-o e junte-o!

gem 'therubyracer', :platforms => :ruby
Santhosh
fonte
2
... e pacote! Essa é, de longe, a resposta mais fácil.
etusm
4

Estou usando o Ubuntu 11.10- 32 bits com ruby ​​1.9.3p194, rails 3.2.3, gem 1.8.24. Estava recebendo o mesmo erro de Javascript ao executar o "console de scripts / rails".

No entanto, fazer um "sudo apt-get install nodejs" resolveu meu problema.

Vibin B. Nair
fonte
4

Os usuários do Fedora NÃO conseguirão executar um simples "yum install nodejs" devido a sérios conflitos de nomeação e colocação de arquivos que impedem que este pacote esteja disponível nos repositórios do Fedora.

Aparentemente, há pelo menos um repositório alternativo disponível com uma construção alternativa que pode funcionar, mas são duas "alternativas" demais para que eu esteja disposto a usá-lo - estou procurando outra alternativa.

Matt Heck
fonte
Isso pode muito bem ter sido verdade no momento, mas funciona bem agora (dez 2015)
Mitch Kent #
4

Se você estivesse no ubuntu $ sudo apt-get install nodejs

Tente não usar outros sistemas como o Windows para desenvolvimento. Pense que quase todos os servidores do mundo são servidores Linux; portanto, ao tentar implantar esse aplicativo, será mais fácil se você o tiver desenvolvido em um ambiente Linux ou Unix também.

Julian Arango López
fonte
3

Eu tive o mesmo problema em um servidor intermediário. Não tive problemas ao executar tarefas de rake na minha máquina de desenvolvimento local, mas a implantação no servidor de temporariedade falhou com a mensagem de erro "Não foi possível encontrar um tempo de execução JavaScript" ao tentar executar os ativos: tarefa de pré-compilação de rake.

Obviamente, therubyracer e execjs estavam no meu Gemfile e eu estava usando as versões mais recentes. Meus arquivos Gemfile.lock foram compatíveis e eu verifiquei ainda mais as versões executando o bundle show .

Depois de pesquisar no Google, acabei excluindo todas as minhas gemas e reinstalando-as, corrigindo o problema. Ainda não sei qual foi a causa principal, mas talvez isso ajude você.

Aqui está a aparência do meu ambiente, BTW:

Ubuntu 10.04.3 LTS
rbenv
Ruby 1.9.2-p290
bundler-1.0.21
execjs-1.3.0
therubyracer-0.9.9
TheSpend
fonte
Estou tendo esse problema no ubuntu 10.04. Não achei que ir com o ubuntu 12.04 valesse a pena, mas acho que vale a pena! Então, acho que no meu caso o problema é que compilei e recompilei meu ruby ​​(1.9.3, 1.9.2) muitas vezes. Estou recompilando novamente para ver se isso corrige. Ah, e estou atualizando meu apt-get para o mais recente.
precisa saber é o seguinte
3

Eu tive o mesmo problema. Adicionar as gems 'execjs' e 'therubyracer' não funciona para mim. apt-get install nodejs - também não funciona. Estou usando o ubuntu 10.04 de 64 bits.

Mas isso me ajudou no seguinte: 1. Criei uma pasta vazia (por exemplo "java"). 2. No terminal da pasta que criei, faço:

$ git clone git://github.com/ry/node.git
$ cd node
$ ./configure
$ make
$ sudo make install

Depois disso, eu corro "bundle install" como de costume (da pasta com o projeto ruby ​​& rails). E o problema foi resolvido. Ruby não precisou reinstalar.

Galina
fonte
qualquer pessoa que tente isso agora receberá um erro. por favor, tente seguir clone git github.com/nodejs/node
Yeasin Ar Rahman
2

Eu tive isso ocorrer comigo na minha máquina Windows, verifica-se que o problema era bem diferente. Eu removi acidentalmente alguns caminhos da minha %PATH%variável. Basta reiniciar o prompt de comando e resolvê-lo. Parece que houve um tempo de execução JS em um desses caminhos ausentes.

Godwin
fonte
Eu também removi algum caminho da minha máquina Windows, você mencionaria como você adicionou o caminho do js?
Hussain Akhtar Wahid 'Ghouri'
@HussainAkhtarWahid, eu não sobrescrevi meu autoexec ou qualquer outra coisa assim, então tudo que eu precisava fazer era fechar minha sessão de cmd e reabri-la.
Godwin
Bem feito, senhor, este era o meu problema depois de tentar tudo configuração necessária para um ambiente de desenvolvimento do Windows rubi
HostMyBus
2

Eu arranquei meu cabelo com esse erro algumas vezes. Eu consegui fazer isso desaparecer algum dia reiniciando o Apache / Nginx.

Então, eu o corrigi da mesma maneira que acima, adicionando o seguinte ao arquivo GEM:

gem 'execjs'
gem 'therubyracer', :platforms => :ruby

e, em seguida, apaguei meu arquivo gemfile.lock e, em seguida, reran a "instalação do pacote configurável". Descobri somente então que o "pacote de instalação" realmente instalou as bibliotecas corretas etc.

LorneCurrie
fonte
1

No Ubuntu, tive que fazer sudo apt-get updatee, em seguida, a instalação do nodejs funcionou.

kilombo1
fonte
1

Quando eu gerar o controlador Rails G, recebi o mesmo erro. Depois disso, quando as seguintes alterações no Gemfile (nos trilhos 4) foram executadas, tudo correu bem.

gem 'execjs'
gem 'therubyracer', "0.11.4"
Depois disso, consigo executar o servidor e executar todas as operações básicas no aplicativo.

Madhan Ayyasamy
fonte
0

adicione seu gemfile que está na pasta que você criou: gem 'execjs' gem 'therubyracer'

Vishnu Harish
fonte
0

No meu caso, executar o bundlecomando fez o truque. Confio que eles se encontrem então.

javabeangrinder
fonte
0

Eu tive esse problema ao usar o RubyMine (6.3.3). Um dia, tentei executar meu código, mas ele não funcionou e reclamei sobre nenhum tempo de execução do JavaScript encontrado. Eu era capaz de correr rails sembora. A correção para mim foi criar uma nova configuração de execução. Parece realmente estranho que a configuração de execução fique corrompida.

Jack
fonte