ExecJS ve bir JavaScript çalışma zamanı bulamadı


403

Ben kullanmaya çalışıyorum Mongoid / Devise Raylar 3.1 şablonu ( Mongoid ve Devise ) ve ben belirten bir hata almaya devam ExecJS bir JavaScript çalışma zamanını bulamıyor. Yüklü olmadığımda yeterince adil, ama Node.js , Mustang ve Ruby Racer'ı yüklemeyi denedim , ancak hiçbir şey çalışmıyor.

Bir JavaScript çalışma zamanı bulamadım. Kullanılabilir çalışma zamanlarının ( ) listesi için bkz. Sstephenson / ExecJS (GitHub ExecJS::RuntimeUnavailable).

Bunun çalışması için ne yapmam gerekiyor?


4
btw - Ubuntu karmik kullanıyorum.
— srboisvert

Cevabı gerçekten değiştirmeyi düşünmelisiniz. Node.js yanıtı neredeyse execjs / rubyracer kadar iyi değil.
— Sean Dunford

3
Ruby'nin onunla ilgili başka sorunları var. Heroku, bundan kaçınabilmeniz için artık Gemfile'nize eklenmesini önermez. devcenter.heroku.com/articles/rails-asset-pipeline#therubyracer Ubuntu'ya uygun bir Javascript çalışma zamanı kurmanın bu sorunun doğru cevabı olduğunu düşünüyorum.
— M. Scott Ford

Yanıtlar:


436

Ubuntu Kullanıcıları

Ubuntu 11.04 kullanıyorum ve benzer sorunları vardı. Node.js'yi yüklemek sorunu çözdü .

Ubuntu 13.04 x64'ten itibaren sadece çalıştırmanız gerekir:

sudo apt-get install nodejs

Bu sorunu çözecektir.


CentOS / RedHat Kullanıcıları

sudo yum install nodejs

1
denedim. şanssız. Acaba bu bir rvm çatışması falan mı? Diğer insanların önerdiği her şey benim için çalışmadı.
— srboisvert

76
gem 'execjs' gem 'therubyracer' bu daha iyi bir çözümdür.
— dwaynemac

26
Heroku, bellek kullanımı nedeniyle artık nemlendiriciyi şiddetle tavsiye etmiyor. Bu cevap başına dev makineme nodejs kurdum ve gemfile'mdan therubyracer'ı çıkardım. Ayrıca bkz . Stackoverflow.com/questions/7092107/… .
— Mark Berry

11
@dwaynemac Katılıyorum. Çalışma zamanı bağımlılık listesine başka bir mücevher eklemek yerine, bir işletim sistemi kitaplığı (varsayılan olarak Mac ve Windows gibi) olarak var olmayı tercih ederim.
— William Denniss

1
Gözden geçiren başka bir şey olmadığı sürece, therubyracer ve execjs'ın heroku dağıtımıyla ilgili sorunlara neden olduğu anlaşılıyor. Bu tercih edilen çözümdür.
— Sturm

445

Gem dosyanıza ExecJS ve Ruby Racer'ı ekleyin ve bundle installsonra çalıştırın .

gem 'execjs'

gem 'therubyracer'

Sonra her şey yolunda olmalı.


6
Bu benim için çalıştı, raylar 3.1rc4 ve Ubuntu 11.04 (raylar 3.1 ile ilk denemem). Hatayı aldığımda bir iskele oluşturmaya çalışıyordum. Raylar 3.1 hala hala topal "kırık".
— wonderfulthunk

35
Rails 3.1 RC 6 için, sadece belirtmeniz gerekirgem 'therubyracer'
— Amree

5
Yeni bir uygulama oluşturulduğunda bu mücevherlerin varsayılan Gemfile'a dahil edilmesi yine de var mı?
— Richard Fawcett

2
bu node.js yüklemekten daha iyi bir çözümdür. Uzak bir sunucuya dağıtıyorsanız veya uygulamayı diğer geliştiricilerle paylaşıyorsanız, herkesin node.js'yi yüklemesi, paket yüklemesini çalıştırmaktan çok daha acı vericidir.
— jdkealy

19
Heroku, bellek kullanımı nedeniyle artık nemlendiriciyi şiddetle tavsiye etmiyor. Dev makineme nodejs ( github.com/joyent/node/wiki/… ) yükledim ve yeniden dosyalayıcıyı gemfile'ımdan çıkardım. Ayrıca bkz . Stackoverflow.com/questions/7092107/… .
— Mark Berry

77

Gem dosyanıza yazın

gem 'execjs'
gem 'therubyracer'

ve sonra koş

bundle install

Her şey benim için iyi çalışıyor :)


9
'Execjs' eklemenize gerek yok
— miguelSantirso

Evet sağ sağ raylar 3.2.1 sadece gem'therubyracer 'kullanmak zorunda
— manish nautiyal

Teşekkürler @manish nautiyal ve @ Peter Mortensen. benim için çalışıyor
— Ravindra

48

Benzer bir sorunum vardı: Rails 3.1 uygulamam Windows'da iyi çalıştı, ancak Linux'ta çalışırken OP ile aynı hatayı aldı. Her iki platformda da benim için çalışan düzeltme, aşağıdakilere eklemekti Gemfile:

gem 'therubyracer', :platforms => :ruby

Hile :platforms => :rubyaslında bu gem sadece "C Ruby (MRI) veya Rubinius, ancak Windows DEĞİL" ile kullanmak anlamına gelir .

Diğer olası değerler :platformsaçıklanmıştır adam sayfası .bundler

Bilginize: Windows yerleşik bir JavaScript motoruna sahiptir execjs. Linux'ta bir yerleşik yoktur, ancak birisinin kurabileceği birkaç tane vardır. therubyracerOnlardan biri. Diğerleri execjs README.md'de listelenir .


Teşekkürler, bu benim için Ubuntu Oneiric üzerinde ruby ​​1.9.3 ve Rails 3.2.1 rvm kurulumunu kullanarak düzeltti
— Yashima

Çok teşekkür ederim efendim!
— DaTroop

Node.js yüklü bir CentOS sunucusunda hatayla karşılaştım. Bu beni aştı. Teşekkürler!
— ncherro

36

Gemfile'ma aşağıdaki taşı eklemek sorunu çözdü:

gem 'therubyracer'

Ardından yeni bağımlılıklarınızı toplayın:

$ bundle install

Ayrıca Gemfile gem gem 'execjs' ekleyin
— Bijendra

6
execjs zaten raylar tarafından dahil edilmiştir. Sadece serbest bırakma adayları için de gerekliydi.
— JDutil

16

Alternatif bir yol, sahip olmadığınız şeyleri içeren mücevher grubu olmadan paketlemektir.

Öyleyse yap:

bundle install --without assets

Gemfile'ı değiştirmek zorunda değilsiniz, elbette varlık zinciri işlerini yapmamanız koşuluyla - genellikle geliştirme dışı ortamlarda geçerlidir. Paket .bundle / config dosyasındaki '--without' ayarınızı hatırlar.


En iyi cevap. Raylar sürüm 3.2.3 için çalıştı
— Frantzdy Romain

1
Bu harika ve böyle basit bir düzeltme. Heroku sitesi RubyRacer'ın artık gerekli olmadığını söylüyor (Cedar yığını ile), bu yüzden aniden programımın yerel olarak neden çalışmadığı konusunda şaşkındım. Bu hile yaptı.
— Mike Blyth

6

Mücevher dosyanıza aşağıdaki taşları ekleyin

gem 'therubyracer'
gem 'execjs'

ve koş

bundle install

bitirdiniz :)


6

Amazon Linux (AMI) için:

sudo yum install nodejs npm --enablerepo=epel

1
Teşekkürler, bu daha yüksek bir seviyede olmalı
— David Mauricio

Bu, AWS standart linux dağıtımında çalışmak için bir capistrano konuşlandırması almak için gerekliydi.
— jjk


4

Aynı hatayla karşılaştım, ancak üretim ortamımda değil yalnızca hazırlama sunucumda. nodejs zaten her iki ortama da kurulmuştu.

Yazarak:

which node

Düğüm komutunun üretimde: / usr / bin / node'da bulunduğunu, ancak / usr / local / bin / node in staging'de olduğunu öğrendim.

Hazırlamada bir sembolik bağlantı oluşturduktan sonra:

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

uygulama daha sonra evrelemede çalıştı.

Muss yok, karışıklık yok.


çekicilik gibi çalışır! Bir tavsiye: Ben nodejsde symlink yapmak gerekiyor
— Rafael Gomes Francisco

3

Bellekte kötü olduğu için RubyRacer kullanmayın. Burada bazı insanlar tarafından önerilen Node.js'yi yüklemek daha iyi bir fikirdir.

ExecJs Kütüphanesi tarafından kullanılabilen bu çalışma zamanları listesi, Node.js kullanımını da belgelemektedir

https://github.com/sstephenson/execjs

Bu nedenle Node.js, RubyRacer'ı kullanmaktan çok aşırı ve daha iyi bir çözüm değildir.



0

Ruby 1.9.3 ile rbenv kullanmaya başladığımda bu problemi almaya başladım; burada sistem yakutum 1.8.7. Gem her iki yerde de yüklü ama nedense raylar komut dosyası onu almadım. Ama "execjs" ve "therubyracer" Gemfile eklemek hile yaptı.


0

Gem dosyanızda Bu satırı uncomment.

19 # mücevher 'therubyracer', platformlar:: yakut

Ve paket yüklemeyi çalıştırın

Çalışmaya hazırsınız. :)


0

Ubuntu 18.04, Ruby 2.6. *, Rails 5 ve RubyMine 2019.1.1 kullanarak RubyMine'de hata ayıklamaya çalışarak aynı sorunla karşılaştım.

Sorunu çözmek için satırımı uncommented mini_racerbenim Gemfileve sonra koştu bundle:

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

Değişmek:

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

0

Ben yüklü nodearacılığıyla NVM'de ve Capistrano'nun ile dağıtırken bu sorunu ile karşılaştı. Etkileşimli olmayan bir şekilde çalıştığı için Capistrano otomatik olarak nvm yüklemedi.

Düzeltmek için, nvm'nin eklediği satırları ~/.bashrcen üste taşıyın . Dosya daha sonra şöyle görünecektir:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.