execJs: "Не вдалося знайти час виконання JavaScript", але execjs AND therubyracer є в Gemfile


191

Я отримую цю помилку:

граблі перервали! Не вдалося знайти час виконання JavaScript. Дивіться https://github.com/sstephenson/execjs ,

Я вже витратив більше годин на пошук Google, тоді я готовий визнати. Я вважаю, це помилка execJs.

З усіх постів це дуже поширене питання з рейками 3.1. Тепер потрібен js час виконання, який є стандартними дорогоцінними каменями, такими як кава-сценарій та sass.

Більшість цих випадків були вирішені, додавши дорогоцінні камені 'execjs' та 'therubyracer' у додаток Gemfile, а потім запустивши 'оновлення пакета' та / або 'встановлення пакета'. Але не для мене.

Напевно, мені пощастило. Я працюю на рейках 3.1.3 / ruby ​​1.9 для старої версії Redhat Linux 4 (2.6.9-101.ELsmp), а gcc - 3.4.6.

Інші виправлені виправлення не допомагають, я не в змозі встановити "nodejs", "johnson" або "mustang", а інші виконуючі програми execJs повинні знайти та використовувати. Вони не робитимуть / не встановлюватимуть у моїй системі.

Мені потрібно виправити проблему, через яку execJs не зможе знайти "therubyracer". Ось Gemfile (і встановлення пакета говорить ОК):

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

І ось слід:

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

У журналі розробки немає нічого цікавого.

Ось директор 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  

Я також спробував execjs-1.2.13. Та ж проблема.

Якщо я коментую execjs.rb нижче, я можу запустити рейку без помилки:

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

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

Але тоді я не отримую часу виконання.

Я бачу, звідки в 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

Тож питання полягає в тому, що оскільки у мене встановлений "therubyracer", чому я не можу знайти runtimes.rb? Чи порушено execJs?

Ось це "therubyracer":

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

Як я можу це виправити?

Відповіді:


346

Користувачі Ubuntu:

У мене була така ж проблема, і я її виправив, встановивши nodejsна своїй системі незалежно від дорогоцінного каміння.

на ubuntu його: sudo apt-get install nodejs

Я використовую 64-бітний ubuntu 11.10

оновлення: З відповіді @Galina нижче я здогадуюсь, що потрібна остання версія nodejs, тому @ steve98177 ваш найкращий варіант у вікні redhat (або CentOS) - це встановити з вихідного коду, як це зробив @Galina, але як ви не можете "зробити / встановити" в цьому полі ?, я пропоную вам спробувати встановити rd fodora (тривалий знімок) https://github.com/joyent/node/wiki/Installing-Node.js-via-package- менеджер або знайти інше поле RH / CentOs (яке ви можете "зробити") і створити власний rpm та встановити на оригінальну коробку RH (якщо старий glibc на RH грає добре).

Справжня проблема тут (IMHO) - це встановити дорогоцінні камені, які залежать від встановлених пакетів поза рубіновим середовищем, чи існує спосіб знати це перед установкою? RFI для дорогоцінних каменів або постачальника?


Користувачі CentOS / RedHat:

sudo yum install nodejs

1
в ubuntu мені довелося поширити оновлення apt-get і потім встановити nodejs.
Vineet Bhatia

У мене була така ж проблема в моєму Ubuntu 12.04-32 біт з ruby ​​1.9.3p392, рейками 3.2.3, gem 1.8.25. Отримувала таку саму помилку під час запуску "скрипт / консоль рейки" та "сервер сценарію / рейки". sudo apt-get install nodejsвирішив моє питання.
ajin6747

Чи повинен це бути Вузол? Я впевнений, що ви можете використовувати такі, як therubyracer, therubyrhino або Apple JavaScriptCore. Я знаю, що ExecJS їх підтримує. github.com/sstephenson/execjs
Дастін Гріффіт

Спроба встановити дорогоцінний камінь будь-якого з альтернативних режимів виконання, підтримуваних execjs, не дістала мене ніде. Дійсно, встановлення nodejs справді спрацювало. Далеко від ідеалу, але це проходить вас поза посадою.
Мітч Кент

Я використовую ubuntu 14.04. Проблема вирішена після встановлення nodejs.
Чарльз Ву

108

Додайте у свій gemfile:

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

Для отримання більш детальної інформації: ExecJS і не змогли знайти час виконання JavaScript


1
Дякую, але це не працює. Подивіться на цю спробу розпізнати ruerhino execjs: gem that rhino /usr/local/lib/ruby/gems/1.9.1/gems/therubyrhino-1.73.1/lib/rhino.rb
steve98177

Для мене теж працювала примітка для початківців рейок, як я: Gemfile знаходиться в папці проекту.
McSas

1
Тим із вас, для кого це не працювало: спробуйте запустити gem install therubyracerспочатку.
максимов

Для всіх, хто має цю проблему, я встановлював зубчастий проект Shopify на систему CentOS 5.8 і працював над проблемою виконання execjs. Я додав це до свого, Gemfileі це спрацювало.
Кейсі

Добре це працює, чудово. Але навіщо нам це робити? Кожен раз, коли я додаю рядок до свого Gemfile, це має справді мати сенс для особистих проектів, а для командних проектів - це ще брудніше робити це, оскільки це впливає на чужі машини, в той час як питання стосується оточення. ІМХО - це не дуже пристойне рішення у довгостроковій перспективі.
Августин Рідінгер


13

Коли ви створюєте порожній проект, цей рядок коментується в Gemfile. Просто розв’яжіть його і зв’яжіть!

gem 'therubyracer', :platforms => :ruby

2
... і пучок! Це, безумовно, найпростіша відповідь.
etusm


4

Я використовую Ubuntu 11.10-32 біт з рубіном 1.9.3p194, рейками 3.2.3, gem 1.8.24. Отримувала таку ж помилку Javascript під час запуску "скрипт / консоль rails".

Однак виконання "sudo apt-get install nodejs" вирішило мою проблему.


4

Користувачі Fedora НЕ зможуть зробити простий "yum install nodejs" через серйозні конфлікти в іменуванні та розміщенні файлів, які заважають цьому пакету бути доступним навіть у сховищах Fedora.

Мабуть, принаймні одне альтернативне сховище доступне з альтернативною збіркою, яка може працювати, але це два занадто багато "замінника" для мене, щоб бути готовим його використовувати. Я шукаю іншу альтернативу.


Це, можливо, було правдою в той час, але це працює нормально (грудень 2015)
Мітч Кент


4

Якби ви були на ubuntu $ sudo apt-get install nodejs

Намагайтеся не використовувати для розробки інші системи, такі як Windows. Подумайте, що майже всі сервери у світі - це сервери Linux, тому, коли ви намагатиметесь розгорнути цю програму, буде легше, якщо ви також розробили це в середовищі Linux або Unix.


3

У мене була така ж проблема на інстальованому сервері. У мене не було проблем із виконанням завдань граблі на моїй локальній машині розробки, але розгортання на сервері постановки не вдалось із повідомленням про помилку "Не вдалося знайти JavaScript під час виконання JavaScript" під час спроби запуску активів: завдання попередньої компіляції граблів.

Звичайно, therubyracer та execjs були в моєму Gemfile, і я використовував останні версії. Мої файли Gemfile.lock збігалися, і я додатково перевірив версії, запустивши пакет програм .

Після пошуку в Google я остаточно видалив усі свої дорогоцінні камені та перевстановив їх, що вирішило проблему. Я досі не знаю, в чому була першопричина, але, можливо, це вам допоможе.

Ось як виглядає моє оточення, BTW:

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

У мене ця проблема в ubuntu 10.04. Не думав, що з Ubuntu 12.04 варто, але я думаю, що так! Отже, я думаю, що в моєму випадку проблема полягає в тому, що я занадто багато разів збирав і перекомпілював свій рубін (1.9.3, 1.9.2). Я повторно складаю його, щоб побачити, чи це виправляє. О, і я вдосконалюю свій підхід до останнього.
Віктор Пудєєв

3

У мене була така ж проблема. Додавання дорогоцінних каменів "execjs" та "therubyracer" не працює для мене. apt-get install nodejs - також не працює. Я використовую 64-бітний ubuntu 10.04.

Але мені це допомогло наступне: 1. Я створив порожню папку (наприклад, "java"). 2. З терміналу в папці, яку я створив:

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

Після цього я запускаю "bundle install" як завжди (з папки з проектом ruby ​​& rails). І проблема була вирішена. Рубі не довелося перевстановлювати.


хто зараз спробує це, отримає помилку. будь ласка, спробуйте наступний git clone github.com/nodejs/node
Yeasin Ar Rahman

2

У мене це траплялося на моїй машині Windows, виявляється, проблема була зовсім іншою. Я випадково видалив деякі шляхи зі своєї %PATH%змінної. Просто перезапуск командного рядка вирішив її. Схоже, що в одному з цих відсутніх шляхів був час виконання JS.


Я також випадково видалив деякий шлях із моєї машини Windows, ти
згадаєш,

@HussainAkhtarWahid, я не перезаписав свій autoexec або щось подібне, тому все, що мені потрібно було зробити, - це закрити мій сеанс cmd і повторно відкрити його.
Годвін

Молодці, це було моєю проблемою після спроби налаштувати все, що потрібно для середовища розробки Windows на рубіні
HostMyBus

2

Я кілька разів витягнув волосся з цією помилкою. Мені вдалося змусити його колись зникнути, перезавантаживши Apache / Nginx.

Тому я виправив це так само, як вище, додавши до файлу GEM наступне:

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

а потім я видалив свій файл gemfile.lock, а потім повторно "встановити пакет". Я виявив, що тоді "встановити пакет" насправді встановити правильні бібліотеки тощо.



1

коли я генерую рейкові контролер g, я отримав ту ж помилку. Після цього, коли на Gemfile (у рейки 4) зробіть наступні зміни, все пройшло гладко. Зміни, які я вніс, були

gem 'execjs'
gem 'therubyracer', "0.11.4"
Після цього я можу запустити сервер і вміти робити всі основні операції над програмою.


0

додайте у свій gemfile, який знаходиться у створеній вами папці: gem 'execjs' gem 'therubyracer'


0

У моєму випадку запуск bundleкоманди зробив свою справу . Я вірю, що вони знайдуть один одного.


0

У мене була ця проблема під час використання RubyMine (6.3.3). Одного разу я спробував запустити свій код, але він не спрацював і поскаржився на те, що не знайдено час виконання JavaScript. Але я зміг бігати rails s. Виправленням для мене було створення нової конфігурації Run. Здається, справді химерно, що конфігурація Run стане пошкодженою.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.