execJs: 'Không thể tìm thấy thời gian chạy JavaScript' nhưng execjs AND Therubyracer đang ở trong Gemfile


191

Tôi đang gặp lỗi này:

cào bỏ! Không thể tìm thấy thời gian chạy JavaScript. Xem https://github.com/sstephenson/execjs ,

Tôi đã dành nhiều giờ hơn để tìm kiếm google sau đó tôi sẵn sàng thừa nhận. Tôi tin rằng đây là một lỗi execJs.

Từ tất cả các bài viết, đây là một vấn đề rất phổ biến với đường ray 3.1. Một thời gian chạy js bây giờ là cần thiết bởi những gì là đá quý tiêu chuẩn như cà phê-script và sass.

Hầu hết các trường hợp này đã được giải quyết bằng cách thêm các viên đá quý 'execjs' và 'Therubyracer' vào ứng dụng Gemfile, rồi chạy 'cập nhật gói' và / hoặc 'cài đặt gói'. Nhưng không phải cho tôi.

Tôi đoán tôi đã gặp may mắn. Tôi đang chạy rails 3.1.3 / ruby ​​1.9 trên phiên bản cũ của Redhat Linux 4 (2.6.9-101.ELsmp) và gcc là 3.4.6.

Các bản sửa lỗi được báo cáo khác không giúp ích được gì, tôi không thể cài đặt 'nodejs', 'johnson' hoặc 'mustang', các runtimes execJs khác được cho là định vị và sử dụng. Họ sẽ không thực hiện / cài đặt trên hệ thống của tôi.

Tôi cần khắc phục sự cố khiến execJs không thể xác định được 'trị liệu'. Đây là Gemfile (và gói cài đặt nói 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

Và đây là một dấu vết:

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

Không có gì thú vị trong nhật ký phát triển.

Đây là thư mục 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  

Tôi cũng đã thử execjs-1.2.13. Vấn đề tương tự.

Nếu tôi nhận xét execjs.rb bên dưới, tôi có thể chạy rake mà không gặp lỗi:

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

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

Nhưng sau đó tôi không nhận được thời gian chạy.

Tôi có thể thấy văn bản lỗi xuất phát từ đâu trong 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

Vì vậy, câu hỏi là, vì tôi đã cài đặt 'Therubyracer', tại sao runtimes.rb không thể tìm thấy nó? Là execJs bị hỏng?

Đây là 'trị liệu':

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

Làm thế nào tôi có thể sửa lỗi này?

Câu trả lời:


346

Người dùng Ubuntu:

Tôi đã có cùng một vấn đề và tôi đã khắc phục nó bằng cách cài đặt nodejstrên hệ thống của tôi độc lập với đá quý.

trên Ubuntu của nó: sudo apt-get install nodejs

Tôi đang sử dụng 64 bit trên Ubuntu 11.10

cập nhật: Từ câu trả lời của @Galina bên dưới Tôi đoán rằng phiên bản mới nhất của nodejs là bắt buộc, vì vậy @ steve98177 tùy chọn tốt nhất của bạn trên hộp redhat (hoặc CentOS) là cài đặt từ mã nguồn như @Galina đã làm, nhưng như bạn không thể "thực hiện / cài đặt" trên hộp này?, tôi khuyên bạn nên thử cài đặt vòng quay fedora (cú sút xa) https://github.com/joyent/node/wiki/Installing-Node.js-via-package- giám đốc hoặc tìm một hộp RH / CentO khác (mà bạn có thể 'tạo') và tạo vòng tua máy của riêng bạn và cài đặt trên hộp RH gốc (nếu glibc cũ trên RH chơi tốt).

Vấn đề thực sự ở đây (IMHO) là cài đặt Đá quý có sự phụ thuộc vào các gói đã cài đặt bên ngoài môi trường ruby, có cách nào để biết trước khi cài đặt không? một RFI cho đá quý hoặc gói?


Người dùng CentOS / RedHat:

sudo yum install nodejs

1
trên Ubuntu tôi đã phải cập nhật sudo apt-get và sau đó cài đặt nodejs hoạt động.
Vineet Bhatia

Tôi gặp vấn đề tương tự trên Ubuntu 12.04- 32 bit của tôi với ruby ​​1.9.3p392, rails 3.2.3, gem 1.8.25. Đã nhận được cùng một lỗi trong khi chạy "script / rails console" và "script / rails server". sudo apt-get install nodejsgiải quyết vấn đề của tôi
ajin6747

Nó có phải là Node không? Tôi khá chắc chắn rằng bạn có thể sử dụng những người khác như Therubyracer, Therubyrhino hoặc Apple JavaScriptCore. Tôi biết ExecJS hỗ trợ họ. github.com/sstephenson/execjs
Dustin Griffith

Việc cố gắng cài đặt gem bất kỳ thời gian chạy thay thế nào được hỗ trợ bởi execjs đã không đưa tôi đến đâu. Thật vậy, cài đặt nodejs đã làm việc. Xa lý tưởng, nhưng nó giúp bạn vượt qua bài viết.
Mitch Kent

Tôi sử dụng Ubuntu 14.04. Vấn đề được giải quyết sau khi cài đặt nodejs.
Charles Wu

108

Trong gemfile của bạn thêm:

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

Để biết thêm chi tiết: ExecJS và không thể tìm thấy thời gian chạy JavaScript


1
Cảm ơn, nhưng điều đó không làm việc. Hãy nhìn vào nỗ lực này để khiến rubyrhino được công nhận bởi execjs: gem mà rhino /usr/local/lib/ruby/gems/1.9.1/gems/therubyrhino-1.73.1/lib/rhino.rb
steve98177

Làm việc cho tôi cũng vậy, một lưu ý cho những người mới bắt đầu như tôi: Gemfile nằm trong thư mục dự án.
McSas

1
Đối với những người mà bạn không làm việc này: hãy thử chạy gem install therubyracertrước.
maksimov

Đối với bất kỳ ai khác có vấn đề này, tôi đã cài đặt dự án hấp dẫn của Shopify lên hệ thống CentOS 5.8 và đang gặp vấn đề về thời gian chạy của execjs. Tôi đã thêm nó vào Gemfilevà nó đã hoạt động.
Casey

Ok nó hoạt động, tốt. Nhưng tại sao chúng ta phải làm điều đó? Mỗi lần tôi thêm một dòng vào Gemfile của mình, nó thực sự có ý nghĩa đối với các dự án cá nhân và đối với các dự án nhóm, thậm chí còn bẩn hơn khi điều này tác động đến máy của người khác trong khi vấn đề là do môi trường. IMHO đó không phải là một giải pháp tốt trong thời gian dài.
Augustin Riedinger


13

Khi bạn tạo một dự án trống, dòng này được nhận xét trong Gemfile. Chỉ cần bỏ nó và bó!

gem 'therubyracer', :platforms => :ruby

2
... Và bó! Đây là, câu trả lời dễ nhất.
etusm


4

Tôi đang sử dụng Ubuntu 11.10- 32 bit với ruby ​​1.9.3p194, rails 3.2.3, gem 1.8.24. Đã nhận được cùng một lỗi Javascript trong khi chạy "bảng điều khiển script / rails".

Tuy nhiên, việc thực hiện "sudo apt-get install nodejs" đã giải quyết được vấn đề của tôi.


4

Người dùng Fedora S NOT KHÔNG thể thực hiện một "nút cài đặt yum" đơn giản do xung đột đặt tên và đặt tệp nghiêm trọng khiến gói này không thể có sẵn thông qua kho Fedora.

Rõ ràng có ít nhất một kho lưu trữ thay thế có sẵn với một bản dựng thay thế có thể hoạt động, nhưng đó là hai "quá nhiều" thay thế để tôi sẵn sàng sử dụng nó-- Tôi đang tìm một giải pháp thay thế khác.


Điều này có thể đúng vào thời điểm đó, nhưng nó hoạt động tốt ngay bây giờ (tháng 12 năm 2015)
Mitch Kent


4

Nếu bạn đang ở trên Ubuntu $ sudo apt-get install nodejs

Cố gắng không sử dụng các hệ thống khác như Windows để phát triển. Hãy nghĩ rằng hầu hết tất cả các máy chủ trên thế giới đều là máy chủ Linux, vì vậy khi bạn cố gắng triển khai ứng dụng đó sẽ dễ dàng hơn nếu bạn đã phát triển nó trên môi trường Linux hoặc Unix.


3

Tôi đã có cùng một vấn đề trên một máy chủ dàn dựng. Tôi không gặp vấn đề gì khi chạy các tác vụ cào trên máy phát triển cục bộ của mình, nhưng việc triển khai đến máy chủ dàn không thành công với thông báo lỗi "Không thể tìm thấy thời gian chạy JavaScript" trong khi thử chạy tài sản: tác vụ tiền mã hóa.

Tất nhiên, Therubyracerexecjs đã ở trong Gemfile của tôi và tôi đang sử dụng các phiên bản mới nhất. Các tệp Gemfile.lock của tôi khớp với nhau và tôi đã xác minh thêm các phiên bản bằng cách chạy chương trình gói .

Sau khi tìm kiếm trên Google, cuối cùng tôi đã xóa tất cả các viên đá quý của mình và cài đặt lại chúng để khắc phục sự cố. Tôi vẫn không biết nguyên nhân gốc rễ là gì, nhưng có lẽ điều này sẽ giúp bạn.

Đây là môi trường của tôi, BTW:

Ubuntu 10.04.3 LTS
rbenv
Ruby 1.9.2-p290
bundler-1.0.21
execjs-1.3.0
therubyracer-0.9.9

Tôi đang gặp vấn đề này trên Ubuntu 10.04. Không nghĩ rằng việc sử dụng Ubuntu 12.04 là đáng giá, nhưng tôi đoán là vậy! Vì vậy, tôi nghĩ rằng trong trường hợp của tôi, vấn đề là tôi đã biên dịch và biên dịch lại viên ruby ​​của mình (1.9.3, 1.9.2) quá nhiều lần. Tôi đang biên dịch lại một lần nữa để xem điều này có khắc phục được không. Oh và tôi đang nâng cấp apt của tôi lên bản mới nhất.
Victor Pudeyev

3

Tôi đã từng gặp vấn đề tương tự. Thêm đá quý 'execjs' và 'Therubyracer' không hoạt động với tôi. apt-get install nodejs - cũng không hoạt động. Tôi đang sử dụng 64bit ubfox 10.04.

Nhưng nó đã giúp tôi như sau: 1. Tôi đã tạo thư mục trống (ví dụ "java"). 2. Từ thiết bị đầu cuối trong thư mục mà tôi đã tạo, tôi thực hiện:

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

Sau đó tôi chạy "gói cài đặt" như bình thường (từ thư mục với dự án ruby ​​& rails). Và vấn đề đã được giải quyết. Ruby không phải cài đặt lại.


Bất cứ ai thử điều này bây giờ sẽ nhận được một lỗi. vui lòng thử theo dõi git clone github.com/nodejs/node
Yeasin Ar Rahman

2

Tôi đã có điều này xảy ra với tôi trên máy Windows của tôi, hóa ra vấn đề hoàn toàn khác. Tôi đã vô tình loại bỏ một số đường dẫn từ %PATH%biến của tôi . Đơn giản chỉ cần khởi động lại dấu nhắc lệnh đã giải quyết nó. Dường như có một thời gian chạy JS ở một trong những đường dẫn bị thiếu đó.


tôi cũng đã xóa một số đường dẫn khỏi máy windows của mình, bạn có đề cập đến việc bạn đã thêm đường dẫn js không
Hussain Akhtar Wahid 'Ghouri'

@HussainAkhtarWahid, tôi đã không ghi đè autoexec của tôi hoặc bất cứ điều gì khác tương tự vì vậy tất cả những gì tôi cần làm là đóng phiên cmd của mình và mở lại.
Godwin

Làm tốt lắm thưa ông, đây là vấn đề của tôi sau khi cố gắng thiết lập mọi thứ cần thiết cho môi trường phát triển ruby ​​của Windows
HostMyBus

2

Tôi đã kéo tóc ra với lỗi này một vài lần. Tôi đã cố gắng làm cho nó đôi khi biến mất bằng cách khởi động lại Apache / Nginx.

Vì vậy, tôi đã sửa nó theo cách tương tự như trên, bằng cách thêm đoạn sau vào tệp GEM:

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

và sau đó tôi đã xóa tệp gemfile.lock của mình và sau đó chạy lại "cài đặt gói". Tôi chỉ tìm thấy sau đó "cài đặt bó" thực sự cài đặt các thư viện chính xác, vv


1

Trên Ubuntu, tôi đã phải sudo apt-get updatecài đặt nodejs.


1

Khi tôi tạo bộ điều khiển rails g tôi cũng gặp lỗi tương tự. Sau đó, khi thực hiện các thay đổi sau trên Gemfile (trong đường ray 4), mọi thứ đều diễn ra suôn sẻ. Những thay đổi tôi đã thực hiện là

gem 'execjs'
gem 'Therubyracer', "0.11.4"
Sau đó tôi có thể chạy máy chủ và có thể thực hiện tất cả các hoạt động cơ bản trên ứng dụng.


0

thêm vào gemfile của bạn trong thư mục bạn đã tạo: gem 'execjs' gem 'Therubyracer'


0

Trong trường hợp của tôi, chạy bundlelệnh đã thực hiện các mẹo. Tôi tin tưởng họ tìm thấy nhau sau đó.


0

Tôi gặp vấn đề này khi sử dụng RubyMine (6.3.3). Một ngày nọ tôi đã cố chạy mã của mình, nhưng nó không hoạt động và phàn nàn về việc không tìm thấy thời gian chạy JavaScript. Tôi đã có thể chạy rails smặc dù. Bản sửa lỗi cho tôi là tạo cấu hình Run mới. Có vẻ thực sự kỳ lạ rằng cấu hình Run sẽ bị hỏng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.