execJs: 'Tidak dapat menemukan runtime JavaScript' tetapi execjs DAN therubyracer ada di Gemfile

191

Saya mendapatkan kesalahan ini:

rake dibatalkan! Tidak dapat menemukan runtime JavaScript. Lihat https://github.com/sstephenson/execjs ,

Saya sudah menghabiskan lebih banyak waktu mencari google maka saya mau mengakui. Saya percaya ini adalah bug execJs.

Dari semua posting, ini adalah masalah yang sangat umum dengan rail 3.1. Js runtime sekarang dibutuhkan oleh apa yang sekarang menjadi permata standar seperti coffee-script dan sass.

Sebagian besar kasus ini diselesaikan dengan menambahkan permata 'execjs' dan 'therubyracer' ke aplikasi Gemfile, dan kemudian menjalankan 'pembaruan bundel' dan / atau 'bundel instal'. Tapi tidak untukku.

Saya kira saya beruntung. Saya menjalankan rail 3.1.3 / ruby ​​1.9 pada versi lama Redhat Linux 4 (2.6.9-101.ELsmp) dan gcc adalah 3.4.6.

Perbaikan yang dilaporkan lainnya tidak membantu, saya tidak dapat menginstal 'nodejs', 'johnson', atau 'mustang', yang dijalankan oleh runtime execjs lainnya harus ditemukan dan digunakan. Mereka tidak akan membuat / menginstal di sistem saya.

Saya perlu memperbaiki masalah yang menyebabkan execJs gagal menemukan 'therubyracer'. Ini adalah Gemfile (dan bundel install mengatakan 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

Dan inilah jejaknya:

~/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>'

Tidak ada yang menarik di log pengembangan.

Berikut adalah direktori eksekutif:

/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  

Saya juga sudah mencoba execjs-1.2.13. Permasalahan yang sama.

Jika saya berkomentar execjs.rb di bawah ini, saya dapat menjalankan rake tanpa kesalahan:

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

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

Tapi kemudian saya tidak mendapatkan runtime.

Saya bisa melihat dari mana teks kesalahan berasal di 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

Jadi pertanyaannya adalah, karena saya sudah menginstal 'therubyracer', mengapa tidak bisa runtimes.rb menemukannya? Apakah eksekutif rusak?

Ini dia 'therubyracer':

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

Bagaimana saya bisa memperbaikinya?

steve98177
sumber

Jawaban:

346

Pengguna Ubuntu:

Saya memiliki masalah yang sama dan saya memperbaikinya dengan menginstal nodejspada sistem saya terlepas dari permata.

di ubuntu-nya: sudo apt-get install nodejs

Saya menggunakan 64bit ubuntu 11.10

pembaruan: Dari jawaban @ Galina di bawah ini saya menduga bahwa versi terbaru dari nodejs diperlukan, jadi @ steve98177 opsi terbaik Anda pada kotak redhat (atau CentOS) adalah menginstal dari kode sumber seperti yang dilakukan @ Galina, tetapi seperti yang Anda lakukan tidak dapat "membuat / menginstal" pada kotak ini?, saya sarankan Anda mencoba menginstal rpm fedora (tembakan panjang) https://github.com/joyent/node/wiki/Installing-Node.js-via-package- manajer atau temukan kotak RH / CentOs lain (yang dapat Anda 'buat' aktif) dan buat rpm Anda sendiri dan instal pada kotak RH asli (jika glibc lama di RH diputar bagus).

Masalah sebenarnya di sini (IMHO) adalah menginstal Permata yang memiliki ketergantungan pada paket yang diinstal di luar lingkungan ruby, apakah ada cara untuk mengetahui sebelum menginstal? sebuah RFI untuk Permata atau bundler?


Pengguna CentOS / RedHat:

sudo yum install nodejs
Paul Williams
sumber
1
di ubuntu saya harus sudo apt-get update dan kemudian installasi nodejs bekerja.
Vineet Bhatia
Saya memiliki masalah yang sama pada Ubuntu saya 12,04-32 bit dengan ruby ​​1.9.3p392, rails 3.2.3, gem 1.8.25. Sedang menerima kesalahan yang sama saat menjalankan "script / rails console" dan "script / rails server". sudo apt-get install nodejsmemecahkan masalah saya.
ajin6747
Apakah harus Node? Saya cukup yakin Anda dapat menggunakan orang lain seperti therubyracer, therubyrhino atau Apple JavaScriptCore. Saya tahu ExecJS mendukung mereka. github.com/sstephenson/execjs
Dustin Griffith
Mencoba untuk menginstal semua runtimes alternatif yang didukung oleh execjs membuat saya tidak berhasil. memang, menginstal nodejs berhasil. Jauh dari ideal, tetapi itu membuat Anda melewati pos.
Mitch Kent
Saya menggunakan ubuntu 14.04. Masalah terpecahkan setelah menginstal nodejs.
Charles Wu
108

Di gemfile Anda tambahkan:

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

Untuk detail lebih lanjut: ExecJS dan tidak dapat menemukan runtime JavaScript

Tiago
sumber
1
Terima kasih, tetapi itu tidak berhasil. Lihatlah upaya ini untuk membuat rubyrhino dikenali oleh eksekutif: permata yang badak /
usr
Bekerja untuk saya juga, catatan untuk pemula rel seperti saya: Gemfile ada di folder proyek.
McSas
1
Bagi Anda yang tidak berhasil: coba jalankan gem install therubyracerterlebih dahulu.
maksimov
Untuk orang lain yang memiliki masalah ini, saya menginstal proyek gagah Shopify ke sistem CentOS 5.8 dan menjalankan masalah runtime execjs. Saya menambahkan ini ke saya Gemfiledan itu berhasil.
Casey
Ok itu berhasil, baik. Tetapi mengapa kita harus melakukan itu? Setiap kali saya menambahkan baris ke Gemfile saya, itu harus benar-benar masuk akal untuk proyek-proyek pribadi, dan untuk proyek-proyek tim, bahkan lebih kotor untuk melakukan itu karena ini berdampak pada mesin orang lain sementara masalahnya spesifik lingkungan. IMHO itu bukan solusi yang sangat layak dalam jangka panjang.
Augustin Riedinger
13

Ketika Anda membuat proyek kosong, baris ini dikomentari di Gemfile. Batalkan komentar dan bundel!

gem 'therubyracer', :platforms => :ruby
Santhosh
sumber
2
... dan bundel! Sejauh ini, inilah jawaban termudah.
etusm
4

Saya menggunakan Ubuntu 11.10-32 bit dengan ruby ​​1.9.3p194, rails 3.2.3, gem 1.8.24. Menerima kesalahan Javascript yang sama saat menjalankan "script / rails console".

Namun melakukan "sudo apt-get install nodejs" telah menyelesaikan masalah saya.

Vibin B. Nair
sumber
4

Pengguna Fedora TIDAK AKAN dapat melakukan "yum install nodejs" sederhana karena konflik penamaan dan penempatan file yang serius yang mencegah paket ini bahkan tersedia melalui repositori Fedora.

Tampaknya ada setidaknya satu repositori alternatif yang tersedia dengan build alternatif yang mungkin berfungsi, tapi itu dua "alternatif" yang terlalu banyak bagi saya untuk bersedia menggunakannya - Saya mencari alternatif lain.

Matt Heck
sumber
Ini mungkin benar pada saat itu, tetapi sekarang berfungsi dengan baik (Des 2015)
Mitch Kent
4

Jika Anda berada di ubuntu $ sudo apt-get install nodejs

Cobalah untuk tidak menggunakan sistem lain seperti Windows untuk pengembangan. Pikirkan bahwa hampir semua server di dunia adalah server Linux, jadi ketika Anda mencoba menggunakan aplikasi itu, akan lebih mudah jika Anda mengembangkannya di lingkungan Linux atau Unix juga.

Julian Arango López
sumber
3

Saya memiliki masalah yang sama pada server pementasan. Saya tidak punya masalah menjalankan tugas menyapu pada mesin pengembangan lokal saya, tetapi penggelaran ke server pementasan gagal dengan pesan kesalahan "Tidak dapat menemukan runtime JavaScript" saat mencoba menjalankan aset: prakompilasi tugas menyapu.

Tentu saja, therubyracer dan eksekutif ada di Gemfile saya, dan saya menggunakan versi terbaru. File Gemfile.lock saya cocok, dan saya selanjutnya memverifikasi versi dengan menjalankan bundle show .

Setelah mencari-cari di Google, saya akhirnya menghapus semua permata saya dan menginstal ulang mereka yang memperbaiki masalah. Saya masih tidak tahu apa penyebab dasarnya, tetapi mungkin ini akan membantu Anda.

Begini lingkungan saya, BTW:

Ubuntu 10.04.3 LTS
rbenv
Ruby 1.9.2-p290
bundler-1.0.21
execjs-1.3.0
therubyracer-0.9.9
Menghabiskan
sumber
Saya mengalami masalah ini di ubuntu 10.04. Tidak berpikir pergi dengan ubuntu 12.04 tidak sia-sia, tapi saya kira begitu! Jadi, saya pikir dalam kasus saya masalahnya adalah saya mengkompilasi dan mengkompilasi ulang batu rubi saya (1.9.3, 1.9.2) terlalu sering. Saya kompilasi ulang lagi untuk melihat apakah ini memperbaikinya. Oh dan saya sedang memperbarui apt-get saya ke yang terbaru.
Victor Pudeyev
3

Saya memiliki masalah yang sama. Menambahkan permata 'execjs' dan 'therubyracer' tidak berfungsi untuk saya. apt-get install nodejs - juga tidak berfungsi. Saya menggunakan ubuntu 64bit 10,04.

Tapi itu membantu saya sebagai berikut: 1. Saya membuat folder kosong (misalnya "java"). 2. Dari terminal dalam folder yang saya buat saya lakukan:

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

Setelah itu saya menjalankan "bundle install" seperti biasa (dari folder dengan proyek ruby ​​& rails). Dan masalahnya terselesaikan. Ruby tidak perlu menginstal ulang.

Galina
sumber
siapa pun yang mencoba ini sekarang akan mendapatkan kesalahan. silakan coba ikuti git clone github.com/nodejs/node
Yeasin Ar Rahman
2

Saya memiliki ini terjadi pada saya di mesin Windows saya, ternyata masalahnya sangat berbeda. Saya tidak sengaja menghapus beberapa jalur dari %PATH%variabel saya . Cukup restart perintah prompt menyelesaikannya. Sepertinya ada runtime JS di salah satu jalur yang hilang.

Godwin
sumber
Saya juga kebetulan telah menghapus beberapa jalur dari mesin windows saya, apakah Anda menyebutkan bagaimana Anda menambahkan jalur js
Hussain Akhtar Wahid 'Ghouri'
@ HusainAkhtarWahid, saya tidak menimpa autoexec saya atau yang lainnya sehingga yang perlu saya lakukan adalah menutup sesi cmd saya dan membukanya kembali.
Godwin
Bagus, Pak, ini masalah saya setelah mencoba mengatur semua yang diperlukan untuk lingkungan pengembangan ruby ​​Windows
HostMyBus
2

Saya telah mencabut rambut saya dengan kesalahan ini beberapa kali. Saya telah berhasil membuatnya kadang-kadang hilang dengan memulai ulang Apache / Nginx.

Jadi saya memperbaikinya dengan cara yang sama seperti di atas, dengan menambahkan yang berikut ke file GEM:

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

dan kemudian saya HAPUS file gemfile.lock saya dan kemudian reran "bundle install". Saya hanya menemukan "bundle install" yang benar-benar menginstal pustaka yang benar, dll.

LorneCurrie
sumber
1

Di Ubuntu, saya harus sudo apt-get updatedan kemudian instal nodejs bekerja.

kilombo1
sumber
1

ketika saya menghasilkan rails g controller saya mendapat kesalahan yang sama. Setelah itu ketika melakukan perubahan berikut pada Gemfile (di rails 4) semuanya berjalan lancar. Perubahan yang saya lakukan adalah

permata 'execjs'
permata 'therubyracer', "0.11.4"
Setelah itu saya dapat menjalankan server dan dapat melakukan semua operasi dasar pada aplikasi.

Madhan Ayyasamy
sumber
0

tambahkan gemfile Anda yang ada di folder yang telah Anda buat: gem 'execjs' gem 'therubyracer'

Wisnu Harish
sumber
0

Dalam kasus saya menjalankan bundleperintah melakukan trik. Saya percaya mereka menemukan satu sama lain.

javabeangrinder
sumber
0

Saya punya masalah ini saat menggunakan RubyMine (6.3.3). Suatu hari saya mencoba menjalankan kode saya, tetapi tidak berhasil dan mengeluh karena tidak ditemukan runtime JavaScript. Saya bisa berlari rails ssekalipun. Perbaikan untuk saya adalah membuat konfigurasi Run baru. Tampaknya sangat aneh bahwa konfigurasi Run akan menjadi rusak.

Mendongkrak
sumber