rubytutorial을 따르려는 Windows의 ExecJS :: RuntimeError


103

업데이트 : // = require_tree 라인 제거에 대한 Colin 의 제안. 문제를 해결했습니다.

나는 모든 제안을 따르고 내 문제를 해결하기 위해 2 일 이상을 낭비했습니다. 나는 Windows 시스템 에서 http://ruby.railstutorial.org 책 을 따르려고 노력하고 있으며 평생 다음과 같은 불쾌한 오류를 지나칠 수 없습니다.

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

나는 execjs 1.3.0 및 더 이상 기억할 수없는 다른 것들을 사용하여 msi로 nodejs를 설치하는 것을 포함한 모든 제안을 시도했습니다. 다음은 gem 파일입니다.

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

그리고 여기에 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>

다음은 콘솔 콘텐츠입니다.

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을 설치하고 다양한 gem을 사용해 보았지만 Windows에서 개발하는 데 도움이 될 수있는 변경 사항을 제안 해주세요. 나는 모든 것에 rubyinstaller를 사용했습니다.

내가 무엇을 놓치고 있습니까?


5
에서 줄 //= require_tree .을 제거 application.js하고 오류가 지속되는지 확인해 주시겠습니까?
Colin R

와우 .... 그게 트릭을 했어요 ... // = require_tree 라인을 제거하는 Colin에게 감사합니다. 문제를 해결했습니다. 나는 그것이 무엇인지 설명 할 수 없지만 그 라인이 오류를 일으키는 이유를 설명 할 수 있습니까?
user1687078

3
이 줄은 모든 .js.coffee파일 app/assets/javascripts을 JavaScript로 컴파일 한 다음 레이아웃에 추가합니다 (그러나 개발 모드에서만, 프로덕션 모드에서는 컴파일 된 js가 application.js파일에 추가됨 ). 갖는 require_tree .오류를 일으키는 원인이되어서는 안된다, 그래서 어떻게 든 당신이 포함되고있는 파일 중 하나에 문제가있어. app/assets/javascripts디렉토리 에있는 모든 파일 목록을 게시 할 수 있습니까 ? 또한 내용을 완전히 삭제하고 sessions.js.coffee다시 추가 //= require_tree .하고 오류가 여전히 존재하는지 확인할 수 있습니다.
Colin R

1
@ColinR, 질문에 대한 답으로 이것을 추가해야합니다. 나는 같은 문제가 있었고 댓글을 찾아 보지 않았다면 다른 질문을 계속 검색했을 것입니다.
Emmanuel F

답변:


242

내 친구가 몇 달 전에 Win 8 RTM에서 Rails 튜토리얼을 시도하고 있었는데이 오류가 발생했습니다. 이 문제가 Windows 7에도 있는지 확실하지 않지만 도움이 될 수 있습니다.

옵션 :

1) //= require_tree .문제 제거 / 무시 -ColinR이 위에서 언급했듯이이 줄은 애초에 문제를 일으키지 않아야합니다. ExecJS가 시스템의 JavaScript 런타임에서 제대로 작동하는 데 실제 문제가 있으며이 줄을 제거하는 것은 그 사실을 무시하는 것입니다.

2) Node.js 설치 / 달리기- 많은 사람들이 Node.js를 설치하고 시스템에 이미있는 JavaScript 런타임 대신 사용하는 것으로 보입니다. 이는 유효한 옵션이지만 추가 소프트웨어가 필요하며 ExecJS가 시스템에 이미있는 JavaScript 런타임에서 제대로 작동하지 않는 원래 문제 만 방지합니다. 시스템의 기존 JavaScript 런타임이 작동해야한다면 더 많은 소프트웨어를 설치하는 대신 작동하도록 만드는 것이 어떻습니까? ExecJS 작성자에 따르면 이미 Windows에 내장 된 런타임이 실제로 지원됩니다.

ExecJS를 사용하면 Ruby에서 JavaScript 코드를 실행할 수 있습니다. JavaScript 프로그램을 평가하는 데 사용할 수있는 최상의 런타임을 자동으로 선택하고 그 결과를 Ruby 객체로 반환합니다.

ExecJS는 다음 런타임을 지원합니다.

  • therubyracer-Ruby에 포함 된 Google V8
  • therubyrhino-JRuby에 포함 된 Mozilla Rhino
  • Node.js
  • Apple JavaScriptCore-Mac OS X에 포함됨
  • Microsoft Windows 스크립트 호스트 (JScript)

(github.com/sstephenson/execjs#execjs에서)

3) 실제 문제 해결 / 학습- 옵션 1과 2의 지식을 사용하여 다른 솔루션을 찾습니다. 우리가 가지고 있던 근본적인 문제에 대한 정보를 실제로 찾기 전에 옵션 1 또는 2를보고 닫은 웹 페이지가 몇 개인 지 말할 수 없습니다. 우리가 계속 살펴본 유일한 이유는 Rails 팀이 (1) 문제를 일으킨 모든 스캐 폴드 생성 프로젝트에 코드 줄을 삽입하거나 (2) 해당 기본값을 실행하기 위해 추가 소프트웨어를 설치해야한다는 것을 믿을 수 없었기 때문입니다. 코드 줄. 결국 우리는 근본적인 문제에 대한 해결책에 도달했습니다 (마일은 다를 수 있음).

우리를 위해 일한 수정 : 문제가있는 시스템에서 ExecJS의 runtimes.rb 파일을 찾습니다 . 이것 처럼 보입니다 . 백업을 위해 찾은 파일의 복사본을 만듭니다. 편집을 위해 원본 runtimes.rb를 엽니 다. 줄로 시작하는 섹션을 찾습니다 JScript = ExternalRuntime.new(. 해당 섹션에서 다음을 포함하는 행에서 :command => "cscript //E:jscript //Nologo //U",- //U만 제거하십시오 . 그런 다음 포함하는 줄에서 :encoding => 'UTF-16LE' # CScript with //U returns UTF-16LEUTF-16LE를 UTF-8. 변경 사항을 파일에 저장하십시오. 이제 파일의이 섹션은 다음과 같아야합니다.

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
)

그런 다음 Rails 서버를 중지했다가 다시 시작하고 브라우저에서 원래 오류를 생성 한 페이지를 새로 고칩니다. 이제 페이지가 오류없이로드되기를 바랍니다. 다음은 원래 결과를 게시 한 ExecJS 문제 스레드입니다. https://github.com/sstephenson/execjs/issues/81#issuecomment-9892952

그래도 문제가 해결되지 않으면 수정 된 runtimes.rb를 백업 복사본으로 덮어 쓸 수 있으며 모든 것이 원래대로 돌아갑니다. 이 경우 옵션 3을 고려하고 계속 검색하십시오. 결국 무엇이 효과가 있는지 알려주십시오. require_tree를 제거하거나 node.js를 설치하지 않는 한 이미 많은 작업이 진행되고 있습니다. :)


20
+50 표를 줄 수 있으면 좋겠습니다. 이것은 Rubyracer를 Windows 용으로 설정하려고 너무 오랫동안 저를 짜증나게했고, 지원되지 않는다는 것을 깨닫고 ExecJS가 제대로로드되도록 시도했습니다. 시간을내어 학습을 도와 주셔서 감사합니다. 궁금한 사람들을 위해 "gem which execjs"를 입력하여 runtimes.rb 파일의 위치를 ​​얻을 수 있습니다.
Michael

4
이 변경 사항이 작동하려면 번들 설치를 실행해야했습니다. 따라서 누군가이 솔루션을 시도했지만 처음에는 작동하지 않는 것 같으면 시도해보십시오! 저는 Windows 8 64 비트를 사용하고 있으며 저에게 효과적이었습니다! 감사합니다
피터 커비

2
+1은 노드 설치로 인한 허슬을 저장했습니다. 옵션 3은 Windows 8 64 비트에서 작동합니다
Sami

10
옵션 3에 대한 설명 : github.com/sstephenson/execjs/issues/111 은 옵션 UTF-16LE을 제거 UTF-16하지 않고 로 변경하는 것만으로 문제를 해결할 수 있다고 말합니다 //U. 확인했습니다.
Tsutomu 2013 년

3
나는 많은 방법을 보았지만 그 이유는 많이 보지 못했습니다. 문자 집합처럼 보이는 것을 변경하면 Windows에서만 차이가 발생하는 이유는 무엇입니까? 나는 궁금합니다.
NathanTempelman 2014-06-03

14

동일한 문제가 발생했습니다 OS- Windows 8 오류- 'ExecJS :: RuntimeError ...'솔루션-Node.js 누락

  1. http://www.nodejs.org/download/ 에서 Node.js를 설치 하십시오.
  2. 컴퓨터를 다시 시작하십시오

1
이것은 나를 위해 일했습니다. 여기 누구든지 node.js 설치가 작동하는 이유를 알고 있습니까?
mpalencia

12

나는이 문제가 있었고 인터넷을 샅샅이 뒤졌다.이 rails gem 파일로 Windows 8을 실행하고 있습니다.

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

에 갔다 http://nodejs.org/download/ 컴퓨터를 다시 시작하고 모든 일 - 설치.


제안 된대로 노드를 설치했고 다시 시작할 필요가 없었습니다. 새 cmd 창을 열기 만하면됩니다 (새 경로에 액세스 할 수있는 것으로 추측 됨)
Will

5

나는 학습 경로를 선호했습니다 . 문제의 원인이

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

빈 문자열을 반환합니다 execjs\external_runtine.rb(버전 1.4.0의 173 행). 이것이 오류 메시지에 텍스트가없는 이유입니다. 제안 된 변경 사항이 작동하지 않았습니다. 나는 변화 UTF-16LEUTF-8,하지만 여전히 빈 문자열을 반환. 나는 제거 \\U으로부터 command이 적어도 반환 텍스트를하지만 잘못된 인코딩이었다 - - 브라우저에서 중국어 문자로 표시.

에 따르면 이 MSDN 블로그 게시물 의 사용 //U플래그를하고 파일로 리디렉션하면됩니다 cscript사용하여 결과를 반환합니다 UTF-16.

그리고 마술처럼 as 및 as를 사용하여 ( @ # % $ & ^ @ $ % !!!?!?!) 작동 했습니다 . 오 잘.command"cscript //E:jscript //Nologo"encoding"UTF-8"


4

Windows Path 환경 변수에 nodejs 폴더를 추가해야했습니다. Windows 8에서 제어판을 열고 시스템, 고급 시스템 설정 (왼쪽)으로 이동하고 왼쪽의 환경 변수를 클릭 한 다음 경로 변수를 편집하여 nodejs 폴더 (아마 Program Files에 있음)에 디렉터리를 포함합니다.

물론 Node.js를 설치하고 ( Windows 설치 프로그램 사용 ) NPM을 통해 CoffeeScript를 설치해야합니다.


4

나는 이것이이 문제에 대한 매우 늦은 대답이라는 것을 알고 있지만 비슷한 것을 얻었고 실제로 문제를 일으키는 원인을 이해하기 위해 전체 경로를 따라갔습니다.

기본 Windows jscript 엔진이 여전히 es3에 있으며 많은 gem이 es5 또는 es6 기능을 활용하고 있음이 밝혀졌습니다. 불행히도 이런 일이 발생하면 (귀하가 es5 또는 es6 기능을 활용하는 gem 또는 코드를 사용하고 있음) 네이티브 js 엔진이있는 Windows에서 작동하도록 할 방법이 없습니다.

이것이 node.js를 설치하면 문제가 해결되는 이유입니다 (노드는 최소한 es5 임).

이것이 jsexec의 런타임 오류로 고생하는 일부 사람들을 도울 수 있기를 바랍니다.

내 2 센트는 노드 (매우 쉬움)를 설치하거나 v8을 설치하고 // = require_tree를 제거하지 않는 것이 좋습니다.

참고 execjs는 감지되면 자동으로 노드를 사용합니다. 그렇지 않으면 강제로 사용하고 다음과 같이 부팅에 추가하십시오.

ENV['EXECJS_RUNTIME'] = 'Node'

env를 node로 설정합니다.


노드를 설치하는 것은 좋은 아이디어 (그리고 아마도 간단한을),하지만 여전히 그 크기 고려 잔인한 약간이다
prusswan을

4

Windows 사용자의 경우이 방법이 작동 할 수 있습니다. Windows에서 실행되는 coffee-script-source> 1.9.0에 문제가 있습니다.

이것을 gemfile에 추가해야하는 것 같습니다.

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

그런 다음

번들 업데이트 커피 스크립트 소스

위의 모든 옵션을 시도하고 몇 가지 조합을 섞어서 Pages # welcome에서 Rails-4, ExecJS :: ProgramError를 발견 하고 여러 시스템 젬 업데이트와 번들 설치 및 업데이트를 수행했습니다.

모든 시도를 되돌리고 커피 스크립트 소스를 다운 그레이드했는데 작동합니다. 비슷한 문제가있을 수있는 다른 사람을 돕기 위해 여기에 게시합니다.

공급 업체 / 캐시에서 파일 업데이트

coffee-script-source-1.8.0.gem 공급 업체 / 캐시에서 오래된 .gem 파일 제거 coffee-script-source-1.9.1.1.gem 번들이 업데이트되었습니다!


수락 된 답변의 옵션 3을 시도한 다음 "인수 오류"가 발생하고 nodejs 설치를 시도했지만 도움이되지 않았으며 nodejs를 경로 변수에 추가하고 (저는 Win10에 있음) 마침내 귀하의 접근 방식을 시도했습니다. 작동했습니다! 감사합니다
elk

3

저와 같은 초보자 :

  1. \ app \ views \ layouts \ application.html.erb로 이동하십시오.
  2. 6 행을 다음에서 변경하십시오.

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

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

여기에서 수정할 튜토리얼 소스


광산은 두 줄을 모두 입력했을 때만 작동합니다. <%= stylesheet_link_tag 'defaults', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'defaults', 'data-turbolinks-track': 'reload' %> 감사의 Leandro P.
rld

1
이러지 마세요. Rails 앱의 모든 자바 스크립트 만 제거됩니다. 이것은 문제를 숨기지 만 나중에 다른 문제를 일으킬 것입니다.
mattangriffel

예, @mattangriffel이 말했듯이 이러지 마세요.
Neil Atkinson 2016

2

빠르고 더러운 솔루션 : 제거 //= require_tree . 에서 application.js.

질문에 대한 의견에서 설명했듯이 이것은 실제로 오류를 일으키는 근본적인 문제를 해결하는 것이 아니라 단순히 우회합니다.


안녕하세요 Colin R, 도움이 필요합니다. <% = stylesheet_link_tag 'application', media : 'all', 'data-turbolinks-track'=> true %> 만 제거하는 5 행에서 오류가 발생하면이 코드 행이 문제를 해결했습니다. 그러나 부트 스트랩은 웹 페이지에 적용되지 않습니다. * = require_tree 제거해도. application.css.sass에서 작동하지 않습니다. 내 친구의 시스템에는 Windows 7 32 비트가 있으며 nodejs는 설치되지 않았습니다. 작동하지 않는 방법 3도 제안했습니다. 제 경우에는 js에 문제가 없다고 생각합니다. 오류를 방지하는 방법을 알고 계십니까?
학습자

또한 Node.js를 설치했고 npm의 경로는 환경 변수에 설정되어 있습니다. 여전히 같은 오류입니다. Windows 8.1 64 비트 OS에서 응용 프로그램을 개발 중이며 동일한 보석이 사용됩니다.
학습자

2

이전에이 실수가 있었기 때문에 솔루션 번호 2를 사용했지만이 상황에서는 작동하지 않았기 때문에

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

그리고 실행

bundle install

내 문제가 해결되었습니다.


솔루션 번호 2를 사용한 경우 Node.js를 설치 한 후 windnows에서 모든 comman 줄을 다시로드해야합니다. 그런 다음 서버를 켜고 다시 시도하십시오.
Yuliem Alavez

1

초보자를위한 덜 복잡한 솔루션은 다음과 같습니다.

튜토리얼을 진행하는 중이라면 기본 Gemfile (또는 거의)으로 작업하고있을 것입니다. 텍스트 편집기에서 열고 다음 줄의 앞부분에서 파운드 기호를 제거 할 수 있습니다.

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

을 다시 실행해야합니다. 그러면 bundle install몇 가지 항목이 다운로드 될 수 있습니다. 그러나 일단 시작되면 문제없이 서버를 시작할 수 있습니다.

적어도 그것은 나를 위해 일했습니다.

그건 그렇고 우분투 12.04에서도 작동합니다.



0

C : \ Users \ this-user \ yo-app 에서 코드 위치를 변경 했습니까 ?

내가 레일스에서 ​​어렸을 때 나는 앱을 만들었고 내 앱의 기본 위치는 C : \ Users \ Duncan \ my-app 이었고, 그런 다음 my-app을 변경하여 D : \ All-my-Apps에 배치했습니다. -폴더에 오류가 있습니다 ....

나는 내 머리를 긁적이며 1,2,3 이상을 시도했다. ..... 아무것도! 모든 코드를 기본 폴더 위치로 반환하고 놀랍게도 다시 롤링했습니다. :)

누군가가 유용하다고 생각할 수있는 경우

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.