ExecJS และไม่พบรันไทม์ JavaScript


403

ฉันพยายามที่จะใช้Mongoid / ประดิษฐ์ Rails 3.1 แม่แบบ ( Mongoidและประดิษฐ์ ) และฉันให้ได้รับข้อผิดพลาดที่ระบุExecJSไม่สามารถหารันไทม์ JavaScript ยุติธรรมเพียงพอเมื่อฉันไม่ได้ติดตั้งใด ๆ แต่ฉันได้ลองติดตั้งNode.js , MustangและRuby Racerแล้ว แต่ไม่มีอะไรทำงาน

ฉันไม่พบรันไทม์ JavaScript ดูsstephenson / ExecJS (GitHub) สำหรับรายการ runtimes ที่มีอยู่ ( ExecJS::RuntimeUnavailable)

ฉันต้องทำอะไรเพื่อให้ได้ผล


4
btw - ฉันใช้อูบุนตู karmic
srboisvert

คุณควรพิจารณาเปลี่ยนคำตอบจริงๆ คำตอบของ Node.js นั้นไม่ดีเท่า execjs / rubyracer
Sean Dunford

3
rubyracer มีปัญหาอื่น ๆ กับมัน Heroku ไม่แนะนำให้รวมไว้ใน Gemfile ของคุณอีกต่อไปหากคุณสามารถหลีกเลี่ยงได้ devcenter.heroku.com/articles/rails-asset-pipeline#therubyracerฉันคิดว่าการติดตั้ง Javascript runtime ที่เหมาะสมบน Ubuntu เป็นคำตอบที่ถูกต้องสำหรับคำถามนี้
M. Scott Ford

คำตอบ:


436

ผู้ใช้งาน Ubuntu

ฉันใช้ Ubuntu 11.04 และมีปัญหาที่คล้ายกัน การติดตั้ง Node.jsแก้ไข

ในฐานะของ Ubuntu 13.04 x64 คุณจะต้องเรียกใช้:

sudo apt-get install nodejs

นี่จะเป็นการแก้ปัญหา


ผู้ใช้ CentOS / RedHat

sudo yum install nodejs

1
ลองมัน ไม่มีโชค. ฉันสงสัยว่ามันเป็นความขัดแย้ง rvm หรืออะไรบางอย่าง ทุกสิ่งที่คนอื่นแนะนำไม่ได้ทำงานให้ฉัน
srboisvert

76
gem 'execjs' gem 'therubyracer' มันเป็นคำตอบที่ดีกว่าอันนี้
dwaynemac

26
ตอนนี้ Heroku ท้อใจอย่างยิ่งต่อผู้ใช้งานเนื่องจากการใช้หน่วยความจำ ฉันติดตั้ง nodejs บนเครื่อง dev ของฉันต่อคำตอบนี้และเอาผู้ดูแลออกจาก gemfile ดูยังstackoverflow.com/questions/7092107/...
Mark Berry

11
@dwaynemac ฉันไม่เห็นด้วย ฉันต้องการรันไทม์ที่มีอยู่เป็นไลบรารีระบบปฏิบัติการ (เช่นเดียวกับ Mac และ Windows โดยค่าเริ่มต้น) แทนที่จะเพิ่มอัญมณีอื่นในรายการพึ่งพา
William Denniss

1
ดูเหมือนว่า therubyracer และ execjs ก่อให้เกิดปัญหากับการปรับใช้ heroku เว้นแต่จะมีสิ่งอื่นที่แก้ไขซึ่งฉันพลาดไป นี่คือทางออกที่ต้องการ
พายุ

445

เพียงแค่เพิ่มExecJSและRuby Racerในไฟล์อัญมณีของคุณและเรียกใช้bundle installหลังจากนั้น

gem 'execjs'

gem 'therubyracer'

ทุกอย่างควรจะดีหลังจาก


6
สิ่งนี้ใช้ได้กับฉัน rails 3.1rc4 และ Ubuntu 11.04 (ครั้งแรกที่ฉันลองใช้ rails 3.1) ฉันพยายามสร้างนั่งร้านเมื่อฉันพบข้อผิดพลาด ยังง่อยอยู่ที่ทางรถไฟ 3.1 นั้น "แตก" ออกมาจากกล่อง
Wonderfulthunk

35
สำหรับ Rails 3.1 RC 6 คุณต้องระบุgem 'therubyracer'
Amree

5
อย่างไรก็ตามมีการรวมอัญมณีเหล่านี้ใน Gemfile เริ่มต้นเมื่อมีการสร้างแอปพลิเคชันใหม่หรือไม่
Richard Fawcett

2
นี่เป็นทางออกที่ดีกว่าการติดตั้ง node.js หากคุณกำลังปรับใช้กับเซิร์ฟเวอร์ระยะไกลหรือแชร์แอปกับนักพัฒนาคนอื่น ๆ การที่ทุกคนติดตั้ง node.js เป็นอะไรที่เจ็บปวดมากกว่าการเรียกใช้การติดตั้งแบบกลุ่มซึ่งพวกเขาจะทำอยู่ดี
jdkealy

19
ตอนนี้ Heroku ท้อใจอย่างยิ่งต่อผู้ใช้งานเนื่องจากการใช้หน่วยความจำ ฉันติดตั้ง nodejs บนเครื่อง dev ของฉัน ( github.com/joyent/node/wiki/ ...... ) และนำ therubyracer ออกจาก gemfile ของฉัน ดูยังstackoverflow.com/questions/7092107/...
Mark Berry

77

ในไฟล์ Gem ของคุณเขียน

gem 'execjs'
gem 'therubyracer'

จากนั้นเรียกใช้

bundle install

ทุกอย่างทำงานได้ดีสำหรับฉัน :)


9
คุณไม่จำเป็นต้องเพิ่ม 'execjs'
miguelSantirso

ใช่แล้วใช่แล้วใน Rails 3.2.1 คุณต้องใช้ gem'therubyracer 'เท่านั้น
manish nautiyal

ขอบคุณ @ manish nautiyal และ @ Peter Mortensen มันใช้งานได้สำหรับฉัน
Ravindra

48

ฉันมีปัญหาที่คล้ายกัน: แอป Rails 3.1 ของฉันทำงานได้ดีบน Windows แต่มีข้อผิดพลาดเดียวกับ OP เมื่อทำงานบน Linux การแก้ไขที่เหมาะกับฉันในทั้งสองแพลตฟอร์มคือการเพิ่มสิ่งต่อไปนี้ในของฉันGemfile:

gem 'therubyracer', :platforms => :ruby

เคล็ดลับคือการรู้ว่า:platforms => :rubyจริง ๆ แล้วหมายถึงใช้อัญมณีนี้กับ "C Ruby (MRI) หรือ Rubinius เท่านั้น แต่ไม่ใช่ Windows"

ค่าที่เป็นไปได้อื่น ๆ สำหรับการ:platformsอธิบายไว้ในหน้าคนbundler

FYI: Windows มีเอ็นจิ้น JavaScript ในตัวซึ่งexecjsสามารถค้นหาได้ บน Linux ไม่มีบิวด์อินแม้ว่ามีหลายอย่างที่สามารถติดตั้งได้ therubyracerเป็นหนึ่งในนั้น คนอื่น ๆ ที่ระบุไว้ในREADME.mdexecjs


ขอขอบคุณหนึ่งนี้แก้ไขสำหรับฉันใน Ubuntu Oneiric โดยใช้การติดตั้ง rvm ของ ruby ​​1.9.3 และ Rails 3.2.1
Yashima

ขอบคุณมาก ๆ ท่าน!
DaTroop

ฉันพบข้อผิดพลาดบนเซิร์ฟเวอร์ CentOS ที่ติดตั้ง node.js สิ่งนี้ทำให้ฉันผ่านพ้นมันไปได้ ขอบคุณ!
ncherro

36

การเพิ่ม gem ต่อไปนี้ใน Gemfile ของฉันแก้ไขปัญหาได้:

gem 'therubyracer'

จากนั้นรวมการพึ่งพาใหม่ของคุณ:

$ bundle install

นอกจากนี้ยังเพิ่ม gem 'execjs' ใน Gemfile
Bijendra

6
ตอนนี้ execjs รวมอยู่ในรางแล้ว มันเป็นสิ่งจำเป็นเท่านั้นในช่วงที่ผู้สมัครปล่อย
JDutil

16

อีกทางเลือกหนึ่งคือการรวมกลุ่มโดยไม่มีกลุ่มอัญมณีที่มีสิ่งที่คุณไม่มี

ดังนั้นทำ:

bundle install --without assets

คุณไม่จำเป็นต้องแก้ไข Gemfile เลยโดยแน่นอนว่าคุณไม่ได้ทำสิ่งใดในห่วงโซ่สินทรัพย์ซึ่งโดยปกติจะใช้ในสภาพแวดล้อมที่ไม่ได้พัฒนา บันเดิลจะจดจำการตั้งค่า '- โดยไม่ต้อง' ของคุณในไฟล์. bundle / config


คำตอบที่ดีที่สุด ทำงานกับรางเวอร์ชั่น 3.2.3
Frantzdy Romain

1
นี่เป็นสิ่งที่ยอดเยี่ยมและเป็นการแก้ไขที่ง่าย เว็บไซต์ Heroku บอกว่า RubyRacer ไม่จำเป็นอีกต่อไป (ด้วย Cedar stack) ดังนั้นฉันจึงงงงวยว่าทำไมโปรแกรมของฉันจึงไม่ทำงานในเครื่อง นี่เป็นการหลอกลวง
Mike Blyth

6

เพิ่มอัญมณีต่อไปนี้ในไฟล์อัญมณีของคุณ

gem 'therubyracer'
gem 'execjs'

และเรียกใช้

bundle install

คุณทำเสร็จแล้ว :)


6

สำหรับ amazon linux (AMI):

sudo yum install nodejs npm --enablerepo=epel

1
ขอขอบคุณสิ่งนี้ควรอยู่ในระดับที่สูงขึ้น
เดวิดเมาริซิโอ

นี่เป็นสิ่งสำคัญที่จะทำให้การติดตั้ง capistrano ทำงานบน distro linux มาตรฐานของ AWS
jjk


4

ฉันมีข้อผิดพลาดเดียวกันนี้ แต่เฉพาะเซิร์ฟเวอร์ชั่วคราวไม่ใช่สภาพแวดล้อมการใช้งานจริงของฉัน nodejs ถูกติดตั้งแล้วบนทั้งสองสภาวะแวดล้อม

โดยพิมพ์:

which node

ฉันพบว่าคำสั่ง node อยู่ใน: / usr / bin / node กับการผลิต แต่: / usr / local / bin / node ในการจัดเตรียม

หลังจากสร้าง symlink บน staging เช่น:

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

แอปพลิเคชันนั้นทำงานในการจัดเตรียม

ไม่มีความยุ่งยากไม่ต้องวุ่นวาย


ทำงานเหมือนจับใจ! คำแนะนำ: ผมจำเป็นต้องทำ symlink สำหรับnodejsยัง
ราฟาเอลเมสฟรานซิส

3

อย่าใช้ RubyRacer เพราะหน่วยความจำไม่ดี การติดตั้ง Node.js ตามคำแนะนำของบางคนที่นี่เป็นความคิดที่ดีกว่า

รายการ runtimes ที่มีให้ซึ่ง ExecJs Library นี้สามารถใช้เอกสาร Node.js

https://github.com/sstephenson/execjs

ดังนั้น Node.js ไม่ใช่ overkill และเป็นทางออกที่ดีกว่าการใช้ RubyRacer



0

ฉันเริ่มพบปัญหานี้เมื่อฉันเริ่มใช้ rbenv กับ Ruby 1.9.3 โดยที่ ruby ​​ของระบบคือ 1.8.7 อัญมณีถูกติดตั้งในทั้งสองแห่ง แต่ด้วยเหตุผลบางอย่างสคริปต์ของรางไม่ได้หยิบมาใช้ แต่การเพิ่ม "execjs" และ "therubyracer" ให้กับ Gemfile นั้นได้ทำการหลอกลวง


0

ในไฟล์อัญมณีของคุณ Uncomment บรรทัดนี้

19 # gem 'therubyracer', platforms:: ruby

และเรียกใช้การติดตั้งมัด

คุณพร้อมที่จะทำงาน :)


0

ความพยายามในการดีบักใน RubyMine โดยใช้ Ubuntu 18.04, Ruby 2.6. *, Rails 5, & RubyMine 2019.1.1ฉันพบปัญหาเดียวกัน

เมื่อต้องการแก้ไขปัญหาฉันไม่ใส่เครื่องหมายข้อคิดเห็นmini_racerบรรทัดจากของฉันGemfileและจากนั้นรันbundle:

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

เปลี่ยนไป:

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

0

ฉันติดตั้งnodeผ่านnvmและพบปัญหานี้เมื่อปรับใช้กับ Capistrano Capistrano ไม่ได้โหลด nvm โดยอัตโนมัติเนื่องจากทำงานโดยไม่โต้ตอบ

ในการแก้ไขเพียงแค่ย้ายบรรทัดที่ nvm เพิ่มไป~/.bashrcยังด้านบน ไฟล์จะมีลักษณะดังนี้:

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.