Windows'ta ExecJS :: RuntimeError Ruby öğreticisini izlemeye çalışıyor


103

GÜNCELLEME: Colin'in // = required_tree satırını kaldırma önerisi. sorunu çözdü.

Her öneriyi takip etmek ve sorunumu düzeltmek için 2 günden fazla zaman harcadım. Http://ruby.railstutorial.org kitabını windows makinesinde takip etmeye çalışıyorum ve hayatım boyunca aşağıdaki kötü hatayı geçemiyorum.

ExecJS::RuntimeError in Static_pages#home

Showing C:/Users/.../bootcamp-sample-app/app/views/layouts/application.html.erb where line #6 raised:

["ok","(function() {\n\n\n\n}).call(this);\n"]
(in C:/Users/.../bootcamp-sample-app/app/assets/javascripts/sessions.js.coffee)
Extracted source (around line #6):

3: <head>
4:   <title><%= full_title(yield(:title)) %></title>
5:   <%= stylesheet_link_tag    "application", media: "all" %>
6:   <%= javascript_include_tag "application" %>
7:   <%= csrf_meta_tags %>
8:   <%= render 'layouts/shim' %>
9: </head>
Rails.root: C:/Users/.../bootcamp-sample-app

Application Trace | Framework Trace | Full Trace
app/views/layouts/application.html.erb:6:in `_app_views_layouts_application_html_erb___487732698_30422172'
Request

Nodej'leri msi ile yüklemek, execj'ler 1.3.0 ve artık hatırlayamadığım diğer şeyler de dahil olmak üzere her öneriyi denedim. İşte mücevher dosyası

source 'https://rubygems.org'

gem 'rails', '3.2.8'
gem 'bootstrap-sass', '2.0.0'
gem 'bcrypt-ruby', '3.0.1'
gem 'faker', '1.0.1'
gem 'will_paginate', '3.0.3'
gem 'bootstrap-will_paginate', '0.0.6'

group :development, :test do
  gem 'sqlite3', '1.3.5'
  gem 'rspec-rails', '2.10.0'
  gem 'guard-rspec', '0.5.5'
  gem 'guard-cucumber'
end

group :development do
  gem 'annotate', '2.5.0'
end


# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails'
  gem 'coffee-rails'
  gem 'coffee-script'
  gem 'uglifier'
end

gem 'jquery-rails', '2.0.2'

gem 'execjs'

# Gems on Linus/Mac
#gem 'therubyracer'


group :test do
  gem 'capybara', '1.1.2'
  gem 'guard-spork', '0.3.2'
  gem 'spork', '0.9.0'
  gem 'factory_girl_rails', '1.4.0'
  gem 'cucumber-rails', '1.2.1', require: false
  gem 'database_cleaner', '0.7.0'


# Test gems on Linux
#  gem 'rb-inotify', '0.8.8'
#  gem 'libnotify', '0.5.9'

# Test gems on Macintosh OS X
#  gem 'selenium-webdriver', '~> 2.22.0'
#  gem 'rb-fsevent', '0.9.1', :require => false
#  gem 'growl', '1.0.3'

# Test gems on Windows
# gem 'rb-fchange', '0.0.5'
# gem 'rb-notifu', '0.0.4'
# gem 'win32console', '1.3.0'
end

group :production do
#  gem 'therubyracer'
  gem 'pg', '0.12.2'
end

# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'

# To use Jbuilder templates for JSON
# gem 'jbuilder'

# Use unicorn as the app server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
#gem 'debugger''

ve işte sessions.js.coffee

# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/

application.js

// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// the compiled file.
//
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
// GO AFTER THE REQUIRES BELOW.
//
//= require jquery
//= require jquery_ujs
//= require_tree .
//= require bootstrap

application.html.erb

<!DOCTYPE html>
 <html>
 <head>
   <title><%= full_title(yield(:title)) %></title>
   <%= stylesheet_link_tag    "application", media: "all" %>
   <%= javascript_include_tag "application" %>
   <%= csrf_meta_tags %>
   <%= render 'layouts/shim' %>
 </head>
 <body>
 <%= render 'layouts/header' %>
 <div class="container">
   <%= yield %>
   <%= render 'layouts/footer' %>
 </div>
 </body>
 </html>

İşte konsol içeriği

Processing by StaticPagesController#home as HTML
  Rendered static_pages/home.html.erb within layouts/application (45.0ms)
Completed 500 Internal Server Error in 1136ms

ActionView::Template::Error (["ok","(function() {\n\n\n\n}).call(this);\n"]
  (in C:/Users/.../bootcamp-sample-app/app/assets/javascripts/sessions.js.coffee)):
    3: <head>
    4:   <title><%= full_title(yield(:title)) %></title>
    5:   <%= stylesheet_link_tag    "application", media: "all" %>
    6:   <%= javascript_include_tag "application" %>
    7:   <%= csrf_meta_tags %>
    8:   <%= render 'layouts/shim' %>
    9: </head>
  app/views/layouts/application.html.erb:6:in `_app_views_layouts_application_html_erb___487732698_30422172'


  Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/_trace.erb (2.0ms)
  Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.0ms)
  Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/template_error.erb within rescues/layout (34.0ms)

Devkit'i yükledim ve çeşitli taşlar denedim, ancak lütfen pencerelerde geliştirmeme yardımcı olabilecek değişiklikler önerin. Her şey için Rubyinstaller'ı kullandım.

Neyi kaçırıyorum?


5
Eğer çizgiyi kaldırmayı deneyin Could //= require_tree .gelen application.jsve hata devam ederse bkz?
Colin R

WOW .... hile yaptı ... çok teşekkürler Colin, // = required_tree satırını kaldırarak. sorunu çözdü. Bunun nasıl bir rahatlama olduğunu açıklayamam ama bu satırın neden hataya neden olduğunu açıklayabilir misiniz?
user1687078

3
Bu satır, her .js.coffeedosyayı app/assets/javascriptsJavaScript'te derler ve ardından mizanpajınıza ekler (ancak yalnızca geliştirme modunda; üretim modunda, derlenen js application.jsdosyanıza eklenir ). Hatalara require_tree .neden olmamalı, bu yüzden bir şekilde dahil edilen dosyalardan biriyle ilgili bir sorununuz var. Dizininizdeki tüm dosyaların bir listesini gönderebilir misiniz app/assets/javascripts? Ayrıca, içeriğini tamamen silmeyi sessions.js.coffeeve tekrar eklemeyi deneyebilir //= require_tree .ve hatanın devam edip etmediğini görebilirsiniz.
Colin R

1
@ColinR, bunu soruya cevap olarak eklemelisin. Aynı sorunu yaşadım ve yorumlara göz atmamış olsaydım, başka bir soru aramaya devam ederdim.
Emmanuel F

Yanıtlar:


242

Arkadaşım birkaç ay önce Win 8 RTM üzerinde bir Rails öğreticisi deniyordu ve bu hatayla karşılaştı. Bu sorunun Windows 7'de de mevcut olup olmadığından emin değilim, ancak bu yardımcı olabilir.

Seçenekler:

1) //= require_tree .Sorunu Kaldırmak / Görmezden Gelmek - ColinR'in yukarıda belirttiği gibi, bu satır ilk etapta bir soruna neden olmamalıdır. ExecJS'nin sisteminizdeki JavaScript çalışma zamanıyla düzgün bir şekilde çalışmasıyla ilgili gerçek bir sorun var ve bu satırı kaldırmak bu gerçeği görmezden gelmek anlamına geliyor.

2) Node.js Kurulumu / Kaçıyor - Pek çok kişi sonunda Node.js'yi kuruyor ve sistemlerinde zaten JavaScript çalışma zamanı yerine bunu kullanıyor gibi görünüyor. Bu geçerli bir seçenek olsa da, ek yazılım gerektirir ve yalnızca orijinal sorunu önler, yani ExecJS, sisteminizde zaten JavaScript çalışma zamanıyla düzgün çalışmıyor. Sisteminizdeki mevcut JavaScript çalışma zamanının çalışması gerekiyorsa, neden daha fazla yazılım yüklemek yerine çalışmasını sağlamayasınız? ExecJS oluşturucusuna göre, Windows'ta zaten yerleşik olan çalışma zamanı aslında destekleniyor ...

ExecJS, Ruby'den JavaScript kodu çalıştırmanıza izin verir. JavaScript programınızı değerlendirmek için mevcut olan en iyi çalışma zamanını otomatik olarak seçer ve ardından sonucu size bir Ruby nesnesi olarak döndürür.

ExecJS şu çalışma zamanlarını destekler:

  • therubyracer - Ruby içine yerleştirilmiş Google V8
  • therubyrhino - JRuby'ye gömülü Mozilla Rhino
  • Node.js
  • Apple JavaScriptCore - Mac OS X'e dahildir
  • Microsoft Windows Komut Dosyası Ana Bilgisayarı (JScript)

(github.com/sstephenson/execjs#execjs adresinden)

3) Sorunun fiilen düzeltilmesi / Öğrenme - Diğer çözümleri aramak için 1. ve 2. seçeneklerin bilgisini kullanın. Yaşadığımız temel sorunla ilgili bilgileri gerçekten bulmadan önce, 1. veya 2. seçenekleri gördükten sonra kaç web sayfasını kapattığımı söyleyemem. Aramaya devam etmemizin tek nedeni, Rails ekibinin (1) bir soruna neden olan her iskele tarafından oluşturulan projeye bir kod satırı ekleyeceğine veya (2) yalnızca bu varsayılanı çalıştırmak için ek yazılım yüklememizi gerektireceğine inanamamaktı. kod satırı. Ve sonunda temel sorunumuz için bir düzeltmeye ulaştık (milleriniz değişebilir).

Bizim için işe yarayan Düzeltme: Sorunlu sistemde, ExecJS'nin runtimes.rb dosyasını bulun. Öyle görünüyor bu . Yedekleme için bulunan dosyanın bir kopyasını oluşturun. Düzenleme için orijinal runtimes.rb dosyasını açın. Çizgi ile başlayan bölümü bulun JScript = ExternalRuntime.new(. O bölümde, içeren satırda :command => "cscript //E:jscript //Nologo //U",- //Utek olanı kaldırın . Sonra içeren satırda :encoding => 'UTF-16LE' # CScript with //U returns UTF-16LE- UTF-16LE'yi olarak değiştirin UTF-8. Değişiklikleri dosyaya kaydedin. Dosyanın bu bölümü şimdi şöyle olmalıdır:

JScript = ExternalRuntime.new(
    :name        => "JScript",
    :command     => "cscript //E:jscript //Nologo",
    :runner_path => ExecJS.root + "/support/jscript_runner.js",
    :encoding    => 'UTF-8' # CScript with //U returns UTF-16LE
)

Ardından, durdurun ve Rails sunucunuzu yeniden başlatın ve tarayıcınızda orijinal hatayı üreten sayfayı yenileyin. Umarım sayfa artık hatasız yüklenir. Sonuçlarımızı ilk olarak yayınladığımız ExecJS sorun dizisi: https://github.com/sstephenson/execjs/issues/81#issuecomment-9892952

Bu sorunu çözmediyse, yaptığınız (umarız) yedek kopya ile değiştirilmiş çalışma zamanlarının üzerine yazabilirsiniz. Rb ve her şey bir kareye geri dönecektir. Bu durumda 3. seçeneği düşünün ve aramaya devam edin. Sonunda sizin için neyin işe yaradığını bize bildirin .. require_tree'yi kaldırmadıkça veya node.js'yi yüklemedikçe, zaten bol miktarda var. :)


20
Keşke sana +50 oy verebilseydim. Bu beni çok uzun zamandır Windows için eklenti oluşturmaya çalışırken, desteklenmediğini fark ederek ve ardından ExecJS'yi düzgün bir şekilde yüklemeye çalışarak rahatsız ediyor. Zaman ayırıp sorunu çözmeme yardımcı olduğunuz için teşekkürler! Merak edenler için, "gem which execjs" yazarak runtimes.rb dosyasının konumunu öğrenebilirsiniz
Michael

4
Çalışması için bu değişikliği yaptıktan sonra paket yüklemeyi çalıştırmak zorunda kaldım. Bu nedenle, biri bu çözümü denerse ve ilk başta işe yaramıyorsa, denediğinizden emin olun! Windows 8 64-bit kullanıyorum ve benim için çalıştı! Teşekkürler
Peter Kirby

2
+1, koşuşturmayı düğüm kurmaktan kurtardı. Seçenek 3 benim için Windows 8 64 bit için çalışıyor
Sami,

10
Seçenek 3 Yorum: github.com/sstephenson/execjs/issues/111 sadece değiştirerek sorunu çözebilir söylüyor UTF-16LEiçin UTF-16çıkarılması işlemi olmadan //Useçeneği. Ben onayladım.
Tsutomu

3
Nasıl olduğunu çok görüyorum ama nedenini pek göremiyorum. Bir karakter setine benzeyen şeyi değiştirmek neden sadece pencerelerde bir fark yaratır? Merak ediyorum hepsi.
NathanTempelman


12

Bu sorunu yaşadım ve interneti kaşıyordum bu raylar mücevher dosyasıyla Windows 8 çalıştırıyorum

source 'https://rubygems.org'

gem 'rails', '3.2.9'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

group :development do gem 'sqlite3', '1.3.5' 
end

# Gems used only for assets and not required # in production environments by default. 

group :assets do 
    gem 'sass-rails', '3.2.5' 
    gem 'coffee-rails', '3.2.2'

gem 'uglifier', '1.2.3' 
end

gem 'jquery-rails', '2.0.2'

group :production do 
    gem 'pg', '0.12.2' 
end

Gitti http://nodejs.org/download/ makineyi yeniden ve her şey amele - yüklü.


Ben önerildiği gibi, sadece yeni bir cmd penceresini açın (bu yeni yollar erişilebilir, böylece olduğunu tahmin), yeniden başlatma gerek yoktu düğüm yüklü
Will

5

Öğrenme yolunu tercih ettim . Görünüşe göre sorun

IO.popen(command, options) { |f| output = f.read }

içinde boş bir dize döndürme execjs\external_runtine.rb(sürüm 1.4.0'da 173. satır) Hata mesajının metin içermemesinin nedeni budur. Önerilen değişiklikler benim için işe yaramadı. Değiştim UTF-16LEiçin UTF-8, ama yine de boş bir dize döndürdü. Ben kaldırıldı \\Ugelen commandbu en azından döndü metni ama yanlış kodlama oldu - - tarayıcıda o Çince karakterler olarak görüntülenir.

Göre bu MSDN blog yayınında kullanarak //Ubayrak ve bir dosyaya yönlendirme neden olur cscriptkullanarak sonuca dönmek UTF-16.

Ve sonra, as ve as kullanılarak ( @ #% $ & ^ @ $% !!!?!?!) Sihirli bir şekilde çalıştı . Oh iyi.command"cscript //E:jscript //Nologo"encoding"UTF-8"


4

Nodejs klasörümü Windows Path ortam değişkenime eklemem gerekiyordu. Windows 8'de Denetim Masası'nı açın, Sistem, Gelişmiş sistem ayarları'na (solda) gidin, soldaki Ortam Değişkenleri'ne tıklayın ve dizini nodejs klasörünüze (muhtemelen Program Dosyaları'nda) dahil etmek için Yol değişkenini düzenleyin.

Elbette Node.js'yi yüklemeniz ( Windows yükleyicisini kullanmanız ) ve CoffeeScript'i NPM aracılığıyla yüklemeniz gerekir.


4

Bunun bu konu için çok geç bir cevap olduğunu biliyorum, ancak benzer bir şeye girdim ve soruna gerçekte neyin neden olduğunu anlamak için tam yoldan gittim.

Varsayılan Windows jscript motorunun hala es3'te olduğu ve birçok mücevherin es5 veya es6 özelliklerinden yararlandığı ortaya çıktı. Ne yazık ki bu gerçekleşirse (es5 veya es6 özelliklerinden yararlanan bir mücevher veya bir kod parçası kullanıyorsanız), yerel js motoruyla pencerelerde çalışmasına izin vermenin bir yolu yoktur.

Node.js'yi kurmanın sorunu çözmesinin nedeni budur (düğüm en azından es5'tir).

Umarım bu, jsexec'in çalışma zamanı hatasıyla mücadele eden bazı insanlara yardımcı olabilir.

Benim 2 sent tavsiyem, düğüm kurmak (çok kolay) veya v8'i kurmak ve // ​​= require_tree'yi kaldırmamaktır.

Not execjs, algılanırsa otomatik olarak düğümü kullanacaktır. Aksi takdirde, kullanımını zorlayarak önyüklemeye şöyle bir şey ekleyerek:

ENV['EXECJS_RUNTIME'] = 'Node'

Env'yi düğüme ayarlamak için.


Düğüm kurmak iyi bir fikir (ve muhtemelen en basitidir), ancak boyutu düşünüldüğünde hala biraz
abartılı

4

Windows kullanıcıları için bu işe yarayabilir. Windows üzerinde çalışan kahve komut dosyası kaynağı> 1.9.0 ile ilgili bir sorun var.

Görünüşe göre bunu gem dosyanıza eklemeniz gerekiyor:

gem 'coffee-script-source', '1.8.0'

o zaman yap

paket güncelleme kahve komut dosyası kaynağı

Yukarıdaki tüm seçenekleri denedim ve ayrıca birkaç kombinasyonunu karıştırdım , ta ki bu Rails-4, ExecJS :: ProgramError in Pages # welcome'ı bulup birden çok sistem mücevher güncellemesi ve paket yüklemeleri ve güncellemeleri yapana kadar .

Tüm denemelerimi geri aldım ve kahve senaryosu kaynağımı düşürdüm ve işe yarıyor. Benzer bir sorunu olabilecek başkalarına yardımcı olmak için burada yayınlamak.

Satıcı / önbellekteki dosyaları güncelleme

coffee-script-source-1.8.0.gem Güncel olmayan .gem dosyalarını vendor'dan / cache coffee-script-source-1.9.1.1.gem'den kaldırma Paket güncellendi!


Kabul edilen cevabın 3. seçeneğini denedim, sonra bir "Bağımsız Değişken Hatası" aldım, nodej'leri yüklemeyi denedim, yardım etmedim, yol değişkenlerine nodej'ler ekledim (Win10'dayım) ve sonunda yaklaşımınızı denedim. Çalıştı! Teşekkürler
elk

3

Benim gibi yeni başlayanlar için:

  1. \ App \ views \ layouts \ application.html.erb konumuna gidin
  2. 6. satırı şundan değiştir:

    '<% = javascript_include_tag' uygulama ',' data-turbolinks-track '=> true%>'

-e

<%= javascript_include_tag 'defaults', 'data-turbolinks-track' => true %>

Burada düzeltmek için eğiticiden kaynak


: Her iki hatlarında koyduğunuzda mayın Sadece çalışır <%= stylesheet_link_tag 'defaults', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'defaults', 'data-turbolinks-track': 'reload' %> thank en Leandro P.
Rld

1
Lütfen bunu yapmayın. Sadece Rails uygulamanızdaki tüm Javascript'i kaldıracaktır. Bu, sorunu gizler ancak daha sonra başkalarına neden olur.
mattangriffel

Evet, @ mattangriffel'in dediği gibi, bunu yapma.
Neil Atkinson

2

Hızlı ve kirli çözüm: remove //= require_tree .dan application.js.

Soruyla ilgili yorumlarda açıkladığım gibi, bu aslında hataya neden olan temel sorunu çözmez, yalnızca onu ortadan kaldırır.


Merhaba Colin R, Yardıma ihtiyacım var. Hata, yalnızca <% = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true%> bu kod satırının kaldırılmasının sorunu çözdüğü 5. satırda meydana gelirse ne olur? Ancak bootstrap web sayfasına uygulanmıyor. * = Required_tree'yi bile kaldırır. from application.css.sass çalışmıyor. Arkadaşımın sisteminde Windows 7 32bit var, nodejs kurulu değil. Sizin önerdiğiniz yöntem 3 bile çalışmıyor. Benim durumumda js ile ilgili bir sorun olmadığını düşünüyorum. Hatayı nasıl önleyeceğiniz hakkında bir fikriniz var mı?
öğrenci

Ayrıca Node.js'yi kurdum ve npm'nin yolu ortam değişkenlerinde ayarlandı. Hala aynı hata. Uygulamayı Windows 8.1 64bit işletim sisteminde geliştiriyorum ve aynı taşlar kullanılıyor.
öğrenci

2

Daha önce bu hatayı yaptığım için 2 numaralı çözümü kullandım, ancak bu durumda işe yaramadı, sonra

gem 'coffee-script-source', '1.8.0'

ve koş

bundle install

ve benim sorunum çözüldü


Eğer 2 numaralı çözümü kullandıysanız, Node.js'yi kurduktan sonra tüm comman satırını windnows'ta yeniden yüklemelisiniz. Ardından sunucuyu açın ve tekrar deneyin.
Yuliem Alavez

1

İşte yeni başlayanlar için daha az karmaşık bir çözüm:

Öğretici üzerinde çalışıyorsanız, muhtemelen varsayılan Gemfile (veya neredeyse) ile çalışıyorsunuzdur. Bunu metin düzenleyicinizde açabilir ve pound işaretini bu satırın önünden kaldırabilirsiniz:

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

Yeniden koşman gerekecek bundle install gerekecek, bu muhtemelen birkaç şey indirecektir. Ancak bir kez yaptığında, sunucuyu sorunsuz bir şekilde başlatabilmelisiniz.

En azından bu benim için çalıştı.

Bu aynı zamanda Ubuntu 12.04'te de çalışıyor.



0

Kodunuzun konumunu C: \ Users \ this-user \ yo-app'den değiştirdiniz mi?

Raylarda gençken bir uygulama oluşturdum ve uygulamamın varsayılan konumu C: \ Users \ Duncan \ my-app idi ve ardından uygulamamı değiştirip D: \ All-my-Apps içine yerleştirdiğimde -folder bu hatayı aldım ....

Başımı kaşıdım, 1,2,3 ve daha fazlasını denedim ..... hiçbir şey! Tüm kodu varsayılan klasör konumuna döndürene ve hayretlerime kadar, tekrar yuvarlanıyordum :)

Birinin bunu yararlı bulması durumunda (Bunun neden olduğunu açıklayamam, belki birisi spekülasyon yapmadan olabilir)

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.