ExecJS dan tidak dapat menemukan runtime JavaScript


403

Saya mencoba untuk menggunakan Mongoid / Rancangan Rails 3.1 Template ( Mongoid dan Rancangan ), dan saya terus mendapatkan kesalahan yang menyatakan ExecJS tidak dapat menemukan runtime JavaScript. Cukup adil ketika saya tidak menginstalnya, tetapi saya sudah mencoba menginstal Node.js , Mustang dan Ruby Racer , tetapi tidak ada yang berhasil.

Saya tidak dapat menemukan runtime JavaScript. Lihat sstephenson / ExecJS (GitHub) untuk daftar runtime yang tersedia ( ExecJS::RuntimeUnavailable).

Apa yang harus saya lakukan agar ini berfungsi?


4
btw - Saya menggunakan ubuntu karmic.
srboisvert

Anda harus benar-benar mempertimbangkan untuk mengubah jawabannya. Jawaban Node.js tidak sebagus eksekutif / rubyracer.
Sean Dunford

3
Rubyracer memiliki masalah lain dengannya. Heroku tidak lagi merekomendasikan untuk memasukkannya ke dalam Gemfile Anda jika Anda dapat menghindarinya. devcenter.heroku.com/articles/rails-asset-pipeline#therubyracer Saya berpikir bahwa menginstal runtime Javascript yang tepat di Ubuntu adalah jawaban yang benar untuk pertanyaan ini.
M. Scott Ford

Jawaban:


436

Pengguna Ubuntu

Saya di Ubuntu 11,04 dan memiliki masalah serupa. Menginstal Node.js memperbaikinya.

Pada Ubuntu 13.04 x64 Anda hanya perlu menjalankan:

sudo apt-get install nodejs

Ini akan menyelesaikan masalah.


Pengguna CentOS / RedHat

sudo yum install nodejs

1
mencobanya. tidak berhasil. Saya bertanya-tanya apakah itu konflik rvm atau sesuatu. Semua yang disarankan orang lain tidak berhasil untuk saya.
srboisvert

76
permata 'execjs' permata 'therubyracer' itu solusi yang lebih baik daripada ini.
dwaynemac

26
Heroku sekarang sangat tidak mendukung therubyracer karena penggunaan memori. Saya menginstal nodejs pada mesin dev saya per jawaban ini dan mengeluarkan therubyracer dari gemfile saya. Lihat juga stackoverflow.com/questions/7092107/… .
Mark Berry

11
@dwaynemac saya tidak setuju. Saya lebih suka runtime ada sebagai perpustakaan OS (seperti dengan Mac dan Windows secara default), daripada menambahkan permata lain ke daftar ketergantungan.
William Denniss

1
Tampaknya therubyracer dan execjs menyebabkan masalah dengan penyebaran heroku, kecuali ada hal lain yang dimodifikasi yang saya lewatkan. Ini adalah solusi yang disukai.
Sturm

445

Cukup tambahkan ExecJS dan Ruby Racer di file gem Anda dan jalankan bundle installsetelahnya.

gem 'execjs'

gem 'therubyracer'

Semuanya harus baik-baik saja setelahnya.


6
Ini bekerja untuk saya, rails 3.1rc4 dan Ubuntu 11.04 (percobaan pertama saya dengan rails 3.1). Saya mencoba membuat perancah ketika saya mendapatkan kesalahan. Masih cukup lumpuh bahwa rel 3.1 "rusak" di luar kotak.
wonderfulthunk

35
Untuk Rails 3.1 RC 6, Anda hanya perlu menentukangem 'therubyracer'
Amree

5
Apakah masih ada untuk memasukkan permata ini ke dalam Gemfile default saat aplikasi baru dibuat?
Richard Fawcett

2
ini adalah solusi yang lebih baik daripada menginstal node.js. Jika Anda menggunakan server jauh atau berbagi aplikasi dengan pengembang lain, membuat semua orang memasang node.js jauh lebih menyakitkan daripada hanya menjalankan instalasi bundel, yang akan mereka lakukan.
jdkealy

19
Heroku sekarang sangat tidak mendukung therubyracer karena penggunaan memori. Saya menginstal nodejs pada mesin dev saya ( github.com/joyent/node/wiki/… ) dan mengeluarkan therubyracer dari gemfile saya. Lihat juga stackoverflow.com/questions/7092107/… .
Mark Berry

77

Dalam file Gem Anda, tulis

gem 'execjs'
gem 'therubyracer'

dan kemudian jalankan

bundle install

Semuanya bekerja dengan baik untuk saya :)


9
Anda tidak perlu menambahkan 'execjs'
miguelSantirso

Ya ur tepat di rel 3.2.1 Anda harus menggunakan hanya gem'therubyracer '
manish nautiyal

Terima kasih @manish nautiyal dan @ Peter Mortensen. itu bekerja untuk saya
Ravindra

48

Saya memiliki masalah yang sama: aplikasi Rails 3.1 saya bekerja dengan baik di Windows tetapi mendapat kesalahan yang sama dengan OP ketika berjalan di Linux. Perbaikan yang berhasil bagi saya di kedua platform adalah menambahkan yang berikut ke saya Gemfile:

gem 'therubyracer', :platforms => :ruby

Kuncinya adalah mengetahui itu :platforms => :rubysebenarnya berarti hanya menggunakan permata ini dengan "C Ruby (MRI) atau Rubinius, tetapi BUKAN Windows."

Mungkin nilai-nilai lain untuk :platformsdijelaskan dalam satu bundlerhalaman manual .

FYI: Windows memiliki mesin JavaScript bawaan yang execjsdapat ditemukan. Di Linux tidak ada builtin meskipun ada beberapa tersedia yang dapat diinstal. therubyraceradalah salah satunya. Lainnya terdaftar di execjs README.md .


Terima kasih, yang satu ini memperbaikinya untuk saya di Ubuntu Oneiric menggunakan rvm instalasi ruby ​​1.9.3 dan Rails 3.2.1
Yashima

Terima kasih banyak Pak!
DaTroop

Saya mengalami kesalahan pada server CentOS dengan node.js diinstal. Ini membuat saya melewatinya. Terima kasih!
ncherro

36

Menambahkan permata berikut ke Gemfile saya memecahkan masalah:

gem 'therubyracer'

Kemudian gabungkan dependensi baru Anda:

$ bundle install

juga tambahkan permata 'execjs' di Gemfile
Bijendra

6
execjs sudah disertakan oleh rel sekarang. Itu hanya juga diperlukan selama kandidat rilis.
JDutil

16

Cara alternatif adalah dengan hanya bundel tanpa grup permata yang berisi hal-hal yang tidak Anda miliki.

Begitu juga:

bundle install --without assets

Anda tidak harus memodifikasi Gemfile sama sekali, asalkan tentu saja Anda tidak melakukan hal-hal rantai aset - yang biasanya berlaku di lingkungan non-pengembangan. Bundle akan mengingat pengaturan '--without' Anda di file .bundle / config.


Jawaban Terbaik. Bekerja untuk rel versi 3.2.3
Frantzdy Romain

1
Ini hebat, dan perbaikan yang sangat sederhana. Situs Heroku mengatakan RubyRacer tidak lagi diperlukan (dengan tumpukan Cedar) jadi saya bingung mengapa tiba-tiba program saya tidak berjalan secara lokal. Ini berhasil.
Mike Blyth

6

Tambahkan permata berikut dalam file permata Anda

gem 'therubyracer'
gem 'execjs'

dan lari

bundle install

kamu selesai :)


6

Untuk amazon linux (AMI):

sudo yum install nodejs npm --enablerepo=epel

1
Terima kasih, ini seharusnya ada di level yang lebih tinggi
David Mauricio

ini penting untuk mendapatkan penyebaran capistrano untuk bekerja pada distro linux standar AWS.
jjk


4

Saya memiliki kesalahan yang sama tetapi hanya pada server pementasan saya bukan lingkungan produksi saya. nodejs sudah diinstal pada kedua lingkungan.

Dengan mengetik:

which node

Saya menemukan bahwa perintah node terletak di: / usr / bin / node pada produksi tetapi: / usr / local / bin / node dalam pementasan.

Setelah membuat symlink pada pementasan yaitu:

sudo ln -s /usr/local/bin/node /usr/bin/node

aplikasi kemudian bekerja dalam pementasan.

Tidak perlu repot.


bekerja seperti pesona! Sebuah saran: Saya perlu membuat symlink nodejsjuga
Rafael Gomes Francisco

3

Jangan gunakan RubyRacer karena memori buruk. Menginstal Node.js seperti yang disarankan oleh beberapa orang di sini adalah ide yang lebih baik.

Daftar runtime yang tersedia ini yang dapat digunakan oleh ExecJs Library juga mendokumentasikan penggunaan Node.js

https://github.com/sstephenson/execjs

Jadi, Node.js bukan solusi berlebihan, dan jauh lebih baik daripada menggunakan RubyRacer.



0

Saya mulai mendapatkan masalah ini ketika saya mulai menggunakan rbenv dengan Ruby 1.9.3 di mana sistem saya ruby ​​1.8.7. Permata dipasang di kedua tempat tetapi untuk beberapa alasan skrip rel tidak mengambilnya. Tetapi menambahkan "execjs" dan "therubyracer" ke Gemfile berhasil.


0

Di file gem Anda Batalkan komentar pada baris ini.

19 # permata 'therubyracer', platform:: ruby

Dan jalankan bundle install

Anda siap bekerja. :)


0

Mencoba melakukan debug di RubyMine menggunakan Ubuntu 18.04, Ruby 2.6. *, Rails 5, & RubyMine 2019.1.1 , saya mengalami masalah yang sama.

Untuk mengatasi masalah ini, saya menghapus komentar mini_racerbaris dari saya Gemfiledan kemudian berlari bundle:

# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'mini_racer', platforms: :ruby

Mengubah:

# See https://github.com/rails/execjs#readme for more supported runtimes
gem 'mini_racer', platforms: :ruby

0

Saya menginstal nodemelalui nvm dan mengalami masalah ini ketika menggunakan Capistrano. Capistrano tidak memuat nvm secara otomatis karena berjalan non-interaktif.

Untuk memperbaikinya, cukup pindahkan garis yang ditambahkan nvm ~/.bashrcke atas Anda. File kemudian akan terlihat seperti ini:

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.