ExecJS :: RuntimeError di Windows mencoba mengikuti rubytutorial

103

UPDATE: Saran Colin untuk menghapus baris // = require_tree. telah memperbaiki masalah tersebut.

Saya telah menyia-nyiakan lebih dari 2 hari untuk mencoba mengikuti setiap saran di luar sana dan memperbaiki masalah saya. Saya mencoba untuk mengikuti buku http://ruby.railstutorial.org di mesin windows dan tidak bisa seumur hidup saya bisa melewati kesalahan jahat berikut.

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

Saya telah mencoba setiap saran termasuk menginstal nodejs dengan msi, menggunakan execjs 1.3.0 dan hal-hal lain yang bahkan tidak dapat saya ingat lagi. Ini file gemnya

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

dan inilah session.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>

Berikut adalah konten konsol

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)

Saya telah menginstal Devkit dan telah mencoba berbagai permata tetapi mohon sarankan perubahan yang dapat membantu saya berkembang di windows. Saya menggunakan rubyinstaller untuk semuanya.

Apa yang saya lewatkan?

pengguna1687078
sumber
5
Bisakah Anda mencoba menghapus garis //= require_tree .dari application.jsdan melihat apakah kesalahan masih terjadi?
Colin R
WOW .... itu berhasil ... terima kasih banyak Colin, menghapus baris // = require_tree. telah memperbaiki masalah tersebut. Saya tidak bisa menjelaskan apa itu lega, tetapi bisakah Anda menjelaskan mengapa garis itu menyebabkan kesalahan?
pengguna1687078
3
Baris itu mengkompilasi setiap .js.coffeefile app/assets/javascriptske dalam JavaScript dan kemudian menambahkannya ke layout Anda (tetapi hanya dalam mode pengembangan; dalam mode produksi, js yang dikompilasi ditambahkan ke application.jsfile Anda ). Memiliki require_tree .seharusnya tidak menyebabkan kesalahan, jadi entah bagaimana Anda memiliki masalah dengan salah satu file yang disertakan. Dapatkah Anda memposting daftar semua file di app/assets/javascriptsdirektori Anda ? Selain itu, Anda dapat mencoba sepenuhnya menghapus konten sessions.js.coffeedan menambahkan kembali //= require_tree .dan melihat apakah kesalahan masih ada.
Colin R
1
@ColinR, Anda harus menambahkan ini sebagai jawaban atas pertanyaan. Saya memiliki masalah yang sama dan jika saya tidak melihat-lihat komentar, saya akan terus mencari pertanyaan lain.
Emmanuel F

Jawaban:

242

Teman saya mencoba tutorial Rails di Win 8 RTM beberapa bulan yang lalu dan mengalami kesalahan ini. Tidak yakin apakah masalah ini juga ada di Windows 7, tetapi ini dapat membantu.

Pilihan:

1) Menghapus //= require_tree ./ Mengabaikan masalah - Seperti yang dinyatakan ColinR di atas, baris ini seharusnya tidak menyebabkan masalah sejak awal. Sebenarnya ada masalah dengan ExecJS yang bekerja dengan baik dengan runtime JavaScript di sistem Anda dan menghapus baris ini hanya mengabaikan fakta tersebut.

2) Menginstal Node.js / Melarikan diri - Banyak orang tampaknya baru saja menginstal Node.js dan menggunakannya sebagai ganti JavaScript runtime yang sudah ada di sistem mereka. Meskipun itu adalah opsi yang valid, ini juga membutuhkan perangkat lunak tambahan dan hanya menghindari masalah asli, yaitu ExecJS tidak berfungsi dengan baik dengan runtime JavaScript yang sudah ada di sistem Anda. Jika runtime JavaScript yang ada di sistem Anda seharusnya berfungsi, mengapa tidak membuatnya berfungsi daripada menginstal lebih banyak perangkat lunak? Menurut pencipta ExecJS, runtime yang sudah dibangun ke dalam Windows sebenarnya didukung ...

ExecJS memungkinkan Anda menjalankan kode JavaScript dari Ruby. Secara otomatis memilih runtime terbaik yang tersedia untuk mengevaluasi program JavaScript Anda, kemudian mengembalikan hasilnya kepada Anda sebagai objek Ruby.

ExecJS mendukung runtime ini:

  • therubyracer - Google V8 tertanam di dalam Ruby
  • therubyrhino - Mozilla Rhino tertanam di dalam JRuby
  • Node.js
  • Apple JavaScriptCore - Disertakan dengan Mac OS X
  • Host Skrip Microsoft Windows (JScript)

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

3) Sebenarnya memperbaiki masalah / Pembelajaran - Gunakan pengetahuan tentang opsi 1 dan 2 untuk mencari solusi lain. Saya tidak dapat memberi tahu Anda berapa banyak halaman web yang saya tutup setelah melihat opsi 1 atau 2 adalah solusi yang diterima sebelum benar-benar menemukan informasi tentang masalah akar yang kami alami. Satu-satunya alasan kami terus mencari adalah karena kami tidak percaya tim Rails akan (1) memasukkan sebaris kode di setiap proyek yang dihasilkan scaffold yang menyebabkan masalah, atau (2) mengharuskan kami menginstal perangkat lunak tambahan hanya untuk menjalankan default itu baris kode. Jadi kami akhirnya sampai pada perbaikan untuk masalah root kami (mil Anda mungkin berbeda).

Perbaikan yang berhasil untuk kami: Pada sistem yang mengalami masalah, temukan file runtimes.rb ExecJS . Ini terlihat seperti ini . Buat salinan file yang ditemukan untuk cadangan. Buka runtimes.rb asli untuk mengedit. Temukan bagian yang dimulai dengan garis JScript = ExternalRuntime.new(. Di bagian itu, pada baris yang berisi :command => "cscript //E:jscript //Nologo //U",- hapus //Usatu - satunya. Kemudian pada baris yang berisi :encoding => 'UTF-16LE' # CScript with //U returns UTF-16LE- ubah UTF-16LE menjadi UTF-8. Simpan perubahan ke file. Bagian file ini sekarang harus membaca:

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
)

Selanjutnya, berhenti lalu restart server Rails Anda dan segarkan halaman di browser Anda yang menghasilkan kesalahan asli. Semoga halaman dimuat tanpa kesalahan sekarang. Berikut utas masalah ExecJS tempat kami awalnya memposting hasil kami: https://github.com/sstephenson/execjs/issues/81#issuecomment-9892952

Jika ini tidak memperbaiki masalah, Anda selalu dapat menimpa runtimes.rb yang dimodifikasi dengan salinan cadangan yang Anda (mudah-mudahan) buat dan semuanya akan kembali ke titik awal. Dalam hal ini, pertimbangkan opsi 3 dan terus mencari. Beri tahu kami apa yang pada akhirnya berhasil untuk Anda .. kecuali jika itu menghapus require_tree atau menginstal node.js, itu sudah banyak yang terjadi. :)

Kevin P.
sumber
20
Saya berharap saya bisa memberi Anda +50 suara. Ini telah membuat saya jengkel terlalu lama mencoba untuk mengaktifkan subyracer untuk Windows, menyadari itu tidak didukung, kemudian mencoba membuat ExecJS dimuat dengan benar. Terima kasih telah meluangkan waktu untuk membantu saya belajar dan tidak menyamarkan masalah! Bagi mereka yang bertanya-tanya, Anda bisa mendapatkan lokasi file runtimes.rb dengan mengetik "gem yang execjs"
Michael
4
Saya harus menjalankan bundle install setelah melakukan perubahan ini agar bisa berfungsi. Jadi, jika ada yang mencoba solusi ini, dan tampaknya tidak berhasil pada awalnya, pastikan Anda mencobanya! Saya menggunakan windows 8 64-bit, dan itu berhasil untuk saya! Terima kasih
Peter Kirby
2
+1 menyelamatkan keramaian dari memasang node. Opsi 3 berfungsi untuk saya di windows 8 64 bit
Sami
10
Komentari opsi 3: github.com/sstephenson/execjs/issues/111 mengatakan bahwa kita dapat menyelesaikan masalah hanya dengan mengubah UTF-16LEke UTF-16tanpa me-removig //Uopsi tersebut. Saya sudah konfirmasi.
Tsutomu
3
Saya melihat banyak cara, tetapi tidak banyak alasannya. Mengapa mengubah apa yang tampak seperti kumpulan karakter membuat perbedaan hanya di windows? Aku penasaran.
NathanTempelman
14

Memiliki masalah yang sama OS- Windows 8 Error- 'ExecJS :: RuntimeError ...' Solution- Node.js hilang

  1. instal Node.js dari http://www.nodejs.org/download/
  2. Nyalakan ulang komputernya
snassr
sumber
1
yang satu ini berhasil untuk saya. Apakah ada orang di sini yang tahu mengapa menginstal node.js berhasil?
mpalencia
12

Saya memiliki masalah ini dan sedang memperlambat internet. Saya menjalankan Windows 8 dengan file permata rel ini

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

Pergi ke http://nodejs.org/download/ diinstal - restart mesin dan semuanya bekerja.

gustavoanalytics
sumber
Saya menginstal node seperti yang disarankan, tidak perlu memulai ulang, cukup buka jendela cmd baru (tebak ini agar jalur baru dapat diakses)
Akankah
5

Saya menyukai rute Pembelajaran . Sepertinya masalahnya berasal dari

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

mengembalikan string kosong di execjs\external_runtine.rb(baris 173 di versi 1.4.0). Inilah mengapa pesan kesalahan tidak berisi teks. Perubahan yang disarankan tidak berhasil untuk saya. Saya berubah UTF-16LEmenjadi UTF-8, tetapi masih mengembalikan string kosong. Saya menghapus \\Udari command- setidaknya ini teks yang dikembalikan, tetapi dalam pengkodean yang salah - di browser itu ditampilkan sebagai karakter Cina.

Menurut posting blog MSDN ini , menggunakan //Ubendera dan mengarahkan ke file menyebabkan cscriptmengembalikan hasil menggunakan UTF-16.

Dan kemudian, secara ajaib, ini berhasil ( @ #% $ & ^ @ $% !!!?!?!) Menggunakan commandas "cscript //E:jscript //Nologo"dan encodingsebagai "UTF-8". Baiklah.

cofiem
sumber
4

Saya harus menambahkan folder nodejs saya ke variabel lingkungan Windows Path saya. Di Windows 8 buka Control Panel, masuk ke System, Advanced system settings (di sebelah kiri), klik Variabel Lingkungan di sebelah kiri, dan edit variabel Path untuk memasukkan direktori ke folder nodejs Anda (mungkin di Program Files).

Tentu saja Anda harus menginstal Node.js (menggunakan penginstal Windows ) dan telah menginstal CoffeeScript melalui NPM.

Evan
sumber
4

Saya tahu ini adalah jawaban yang sangat terlambat untuk masalah ini, tetapi saya mendapatkan sesuatu yang serupa dan berusaha sepenuhnya untuk memahami apa yang sebenarnya menyebabkan masalah tersebut.

Ternyata mesin jscript windows default masih di es3, dan banyak permata yang memanfaatkan fitur es5 atau es6. Sayangnya jika ini terjadi (Anda menggunakan permata atau potongan kode yang memanfaatkan fitur es5 atau es6), tidak ada cara untuk membiarkannya berfungsi di windows dengan mesin js asli.

Inilah alasan mengapa menginstal node.js memecahkan masalah (node ​​setidaknya es5).

Semoga ini dapat membantu beberapa orang yang berjuang dengan kesalahan runtime jsexec.

Saran 2 sen saya adalah menginstal node (sangat mudah) atau menginstal v8, dan tidak menghapus // = require_tree.

Catatan execjs akan secara otomatis menggunakan node jika terdeteksi. Jika tidak memaksa penggunaannya, menambahkan boot sesuatu seperti:

ENV['EXECJS_RUNTIME'] = 'Node'

Untuk menyetel env ke node.

Dinuz
sumber
memasang node adalah ide yang bagus (dan mungkin yang paling sederhana), tetapi masih sedikit berlebihan mengingat ukurannya
prusswan
4

Untuk pengguna windows, ini mungkin berhasil. Ada masalah dengan coffee-script-source> 1.9.0 yang berjalan di windows.

Sepertinya Anda harus menambahkan ini ke gemfile Anda:

permata 'kopi-script-source', '1.8.0'

lalu lakukan

bundel memperbarui sumber skrip kopi

Saya mencoba semua opsi di atas, dan juga mencampur beberapa kombinasinya, sampai saya menemukan Rails-4 ini, ExecJS :: ProgramError di Halaman # selamat datang dan telah melakukan beberapa pembaruan permata sistem dan pemasangan bundel dan pembaruan.

Saya mengembalikan semua percobaan saya dan menurunkan versi sumber skrip kopi saya dan berhasil. Posting di sini untuk membantu orang lain, yang mungkin memiliki masalah serupa.

Memperbarui file di vendor / cache

coffee-script-source-1.8.0.gem Menghapus file .gem yang kedaluwarsa dari vendor / cache coffee-script-source-1.9.1.1.gem Bundel telah diperbarui!

DJSampat
sumber
Saya mencoba opsi 3 dari jawaban yang diterima, kemudian mendapat "Argument Error", mencoba menginstal nodejs, tidak membantu, menambahkan nodejs ke variabel path (saya menggunakan Win10) dan akhirnya mencoba pendekatan Anda. Bekerja! Terima kasih
rusa
3

Untuk pemula seperti saya:

  1. Arahkan ke \ app \ views \ layouts \ application.html.erb
  2. Ubah baris 6 dari:

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

untuk

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

Sumber dari tutorial untuk diperbaiki di sini

Leandro P.
sumber
Tambang hanya berfungsi ketika saya memasukkan kedua baris: <%= stylesheet_link_tag 'defaults', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'defaults', 'data-turbolinks-track': 'reload' %> terima kasih Leandro P.
rld
1
Tolong jangan lakukan ini. Ini hanya akan menghapus semua Javascript di aplikasi Rails Anda. Ini menyembunyikan masalah tetapi akan menyebabkan masalah lain nanti.
mattangriffel
Ya, seperti yang dikatakan @mattangriffel, jangan lakukan ini.
Neil Atkinson
2

Solusi cepat dan kotor: keluarkan //= require_tree .dari application.js.

Seperti yang saya jelaskan di komentar untuk pertanyaan, ini tidak benar-benar menyelesaikan masalah mendasar yang menyebabkan kesalahan, tetapi hanya mengabaikannya.

Colin R
sumber
Halo Colin R, saya butuh bantuan. Bagaimana jika kesalahan terjadi pada baris 5, di mana hanya menghapus <% = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true%> baris kode ini memperbaiki masalah. Tetapi bootstrap tidak berlaku untuk halaman web. Bahkan menghapus * = require_tree. dari application.css.sass tidak berfungsi. Sistem teman saya memiliki Windows 7 32bit, nodejs tidak diinstal. Bahkan metode 3 yang disarankan oleh Anda tidak berfungsi. Saya pikir tidak ada masalah dengan js dalam kasus saya. Tahu bagaimana mencegah kesalahan?
pelajar
Saya juga menginstal Node.js dan jalur npm diatur dalam variabel lingkungan. Kesalahan masih sama. Saya sedang mengembangkan aplikasi di Windows 8.1 64bit OS, dan permata yang sama digunakan.
pelajar
2

Saya menggunakan solusi nomor 2 karena sebelumnya saya mengalami kesalahan ini, tetapi dalam hal ini tidak berhasil, kemudian saya menambahkan

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

dan lari

bundle install

dan masalah saya teratasi

Yuliem Alavez
sumber
Jika Anda menggunakan solusi nomor 2, Anda harus memuat ulang semua baris comman di windnows setelah menginstal Node.js. Kemudian hidupkan server dan coba lagi.
Yuliem Alavez
1

Berikut solusi yang tidak terlalu rumit, untuk pemula:

Jika Anda baru saja mengerjakan tutorial, Anda mungkin bekerja dengan Gemfile default (atau hampir). Anda dapat membukanya di editor teks Anda, dan menghapus tanda pagar dari depan baris ini:

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

Anda perlu menjalankan ulang bundle install, yang kemungkinan akan mengunduh beberapa hal. Tapi begitu itu terjadi, Anda seharusnya bisa memulai server tanpa masalah.

Setidaknya, itu berhasil untuk saya.

Ini juga berfungsi di Ubuntu 12.04.

Karl Giesing
sumber
0

Apakah Anda mengubah lokasi kode Anda dari C: \ Users \ this-user \ yo-app ?

Ketika saya masih muda di rel, saya telah membuat aplikasi dan lokasi default aplikasi saya adalah C: \ Users \ Duncan \ my-app dan kemudian, ketika saya mengubah aplikasi saya dan meletakkannya di D: \ All-my-Apps -folder saya mengalami kesalahan itu ....

Aku menggaruk kepalaku, mencoba 1,2,3 dan lebih ..... tidak ada! Sampai saya mengembalikan semua kode ke lokasi folder default dan saya takjub, saya bergulir lagi :)

Jika seseorang mungkin menganggap ini berguna (saya tidak bisa menjelaskan mengapa itu terjadi, mungkin seseorang mungkin tanpa spekulasi)

dancun chiriga
sumber