Windows 上的 ExecJS::RuntimeError 试图遵循 ruby​​tutorial [英] ExecJS::RuntimeError on Windows trying to follow rubytutorial

查看:18
本文介绍了Windows 上的 ExecJS::RuntimeError 试图遵循 ruby​​tutorial的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

更新: Colin 建议删除该行//= require_tree.已解决问题.

我浪费了超过 2 天的时间来尝试遵循那里的每条建议并解决我的问题.我正在尝试在 Windows 机器上遵循 http://ruby.railstutorial.org 的书,但不能终生我克服了以下令人讨厌的错误.

ExecJS::RuntimeError in Static_pages#home显示 C:/Users/.../bootcamp-sample-app/app/views/layouts/application.html.erb 其中第 6 行提出:["ok","(function() {



}).call(this);
"](在 C:/Users/.../bootcamp-sample-app/app/assets/javascripts/sessions.js.coffee)提取的源代码(围绕第 6 行):3:<头>4:<title><%=full_title(yield(:title))%></title>5: <%= stylesheet_link_tag "application", media: "all" %>6:<%=javascript_include_tag应用程序"%>7:<%= csrf_meta_tags %>8:<%=渲染'布局/垫片'%>9:</头>Rails.root: C:/Users/.../bootcamp-sample-app应用程序跟踪 |框架跟踪 |完整跟踪app/views/layouts/application.html.erb:6:在`_app_views_layouts_application_html_erb___487732698_30422172'要求

我尝试了所有建议,包括使用 msi 安装 nodejs、使用 execjs 1.3.0 和其他我什至不记得的东西.这是gem文件

source 'https://rubygems.org'宝石导轨",3.2.8"gem 'bootstrap-sass', '2.0.0'宝石bcrypt-ruby",3.0.1"宝石 'faker', '1.0.1'宝石'will_paginate','3.0.3'gem 'bootstrap-will_paginate', '0.0.6'组:开发,:测试做宝石'sqlite3','1.3.5'宝石rspec-rails",2.10.0"gem 'guard-rspec', '0.5.5'宝石守卫黄瓜"结尾组:开发做宝石'注释','2.5.0'结尾# Gems 仅用于资产,不是必需的# 默认在生产环境中.组:资产做gem 'sass-rails'宝石咖啡轨"宝石'咖啡脚本'宝石 'uglifier'结尾宝石'jquery-rails','2.0.2'宝石'execjs'# Linus/Mac 上的 Gems#gem 'therubyracer'组:测试做宝石水豚",1.1.2"gem 'guard-spork', '0.3.2'宝石 'spork', '0.9.0'宝石 'factory_girl_rails', '1.4.0'gem 'cucumber-rails', '1.2.1', 要求:false宝石 'database_cleaner', '0.7.0'# 在 Linux 上测试 gems# gem 'rb-inotify', '0.8.8'# gem 'libnotify', '0.5.9'# 在 Macintosh OS X 上测试 gems# gem 'selenium-webdriver', '~>2.22.0'# gem 'rb-fsevent', '0.9.1', :require =>错误的# gem '咆哮', '1.0.3'# 在 Windows 上测试 gems# gem 'rb-fchange', '0.0.5'# gem 'rb-notifu', '0.0.4'# gem 'win32console', '1.3.0'结尾组:生产做# gem 'therubyracer'宝石pg",0.12.2"结尾# 使用 ActiveModel has_secure_password# gem 'bcrypt-ruby', '~>3.0.0'# 为 JSON 使用 Jbuilder 模板# gem 'jbuilder'# 使用独角兽作为应用服务器# gem '独角兽'# 使用 Capistrano 部署# gem 'capistrano'# 使用调试器#gem '调试器''

这里是 sessions.js.coffee

# 将所有与匹配控制器相关的行为和钩子放在这里.# 所有这些逻辑将自动在 application.js 中可用.# 你可以在这个文件中使用 CoffeeScript:http://jashkenas.github.com/coffee-script/

application.js

//这是一个将被编译成application.js的manifest文件,它将包含所有文件//下面列出.////此目录中的任何 JavaScript/Coffee 文件,lib/assets/javascripts,vendor/assets/javascripts,//或插件的供应商/资产/javascripts,如果有的话,可以使用相对路径在此处引用.////这里不建议直接添加代码,但是如果添加,它会出现在底部//编译后的文件.////警告:第一条空行标志着要处理的内容的结束,任何空行都应该//遵循以下要求.////= 需要 jquery//= 需要 jquery_ujs//= require_tree .//= 需要引导程序

application.html.erb

<头><title><%= full_title(yield(:title)) %></title><%= stylesheet_link_tag "application", media: "all" %><%= javascript_include_tag "应用程序" %><%= csrf_meta_tags %><%= 渲染布局/垫片"%><身体><%= 渲染布局/标题"%><div class="容器"><%=产率%><%= 渲染布局/页脚"%>

这是控制台内容

由 StaticPagesController#home 处理为 HTML在布局/应用程序中呈现 static_pages/home.html.erb(45.0 毫秒)在 1136 毫秒内完成 500 个内部服务器错误ActionView::Template::Error (["ok","(function() {



}).call(this);
"](在 C:/Users/.../bootcamp-sample-app/app/assets/javascripts/sessions.js.coffee 中):3:<头>4:<title><%=full_title(yield(:title))%></title>5: <%= stylesheet_link_tag "application", media: "all" %>6:<%=javascript_include_tag应用程序"%>7:<%= csrf_meta_tags %>8:<%=渲染'布局/垫片'%>9:</头>app/views/layouts/application.html.erb:6:在`_app_views_layouts_application_html_erb___487732698_30422172'渲染 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)渲染 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)在救援/布局内渲染 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 (34.0ms)

我已经安装了 Devkit 并尝试了各种 gem,但请提出可以帮助我在 Windows 上开发的更改建议.我什么都用 ruby​​installer.

我错过了什么?

解决方案

几个月前,我的朋友在尝试有关 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 返回 UTF-16LE - 将 UTF-16LE 更改为 UTF-8 .将更改保存到文件中.文件的这一部分现在应该是:

JScript = ExternalRuntime.new(:名称 =>JScript",:命令=>"cscript//E:jscript//Nologo",:runner_path =>ExecJS.root + "/support/jscript_runner.js",:编码 =>'UTF-8' # CScript with//U 返回 UTF-16LE)

接下来,停止然后重新启动 Rails 服务器并刷新浏览器中产生原始错误的页面.希望页面现在加载没有错误.这是我们最初发布结果的 ExecJS 问题线程:https://github.com/sstephenson/execjs/issues/81#issuecomment-9892952

如果这不能解决问题,您可以随时使用您(希望)制作的备份副本覆盖修改后的 runtimes.rb,一切都会恢复原状.在这种情况下,请考虑选项 3 并继续搜索.让我们知道什么最终对你有用......除非它删除了 require_tree 或安装 node.js,否则已经有很多了.:)

UPDATE: Colin's suggestion of removing the line //= require_tree . has fixed the issue.

I have wasted over 2 days trying to follow every suggestion out there and fix my issue. I am trying to follow the http://ruby.railstutorial.org book on windows machine and cannot for the life of me get past the following nasty error.

ExecJS::RuntimeError in Static_pages#home

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

["ok","(function() {



}).call(this);
"]
(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

I have tried every suggestion including installing nodejs with the msi, using execjs 1.3.0 and other things which I can't even remember any more. Here is the gem file

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

and here is the 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>

Here is console content

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() {



}).call(this);
"]
  (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)

I have installed Devkit and have tried various gems but please suggest changes which can help me develop on windows. I used rubyinstaller for everything.

What am I missing?

解决方案

My friend was attempting a Rails tutorial on Win 8 RTM a few months ago and ran into this error. Not sure if this issue exists in Windows 7 as well, but this may help.

Options:

1) Removing //= require_tree . / Ignoring the issue - As ColinR stated above, this line should not be causing an issue in the first place. There is an actual problem with ExecJS working properly with the JavaScript runtime on your system and removing this line is just ignoring that fact.

2) Installing Node.js / Running away - Many people seem to just end up installing Node.js and using that instead of the JavaScript runtime already on their system. While that is a valid option, it also requires additional software and only avoids the original issue, which is that ExecJS is not working properly with the JavaScript runtime already on your system. If the existing JavaScript runtime on your system is supposed to work, why not make it work instead of installing more software? According to the ExecJS creator, the runtime already built into Windows is in fact supported...

ExecJS lets you run JavaScript code from Ruby. It automatically picks the best runtime available to evaluate your JavaScript program, then returns the result to you as a Ruby object.

ExecJS supports these runtimes:

  • therubyracer - Google V8 embedded within Ruby
  • therubyrhino - Mozilla Rhino embedded within JRuby
  • Node.js
  • Apple JavaScriptCore - Included with Mac OS X
  • Microsoft Windows Script Host (JScript)

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

3) Actually fixing the issue / Learning - Use the knowledge of options 1 and 2 to search for other solutions. I can't tell you how many webpages I closed upon seeing options 1 or 2 was the accepted solution before actually finding information about the root issue we were having. The only reason we kept looking was that we couldn't believe the Rails team would (1) insert a line of code in every scaffold generated project that caused an issue, or (2) require that we install additional software just to run that default line of code. And so we eventually arrived at a fix for our root issue (your miles may vary).

The Fix that worked for us: On the system having issues, find ExecJS's runtimes.rb file. It looks like this. Make a copy of the found file for backup. Open the original runtimes.rb for editing. Find the section that starts with the line JScript = ExternalRuntime.new(. In that section, on the line containing :command => "cscript //E:jscript //Nologo //U", - remove the //U only. Then on the line containing :encoding => 'UTF-16LE' # CScript with //U returns UTF-16LE - change UTF-16LE to UTF-8 . Save the changes to the file. This section of the file should now read:

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
)

Next, stop then restart your Rails server and refresh the page in your browser that produced the original error. Hopefully the page loads without error now. Here's the ExecJS issue thread where we originally posted our results: https://github.com/sstephenson/execjs/issues/81#issuecomment-9892952

If this did not fix the issue, you can always overwrite the modified runtimes.rb with the backup copy you (hopefully) made and everything will be back to square one. In that case, consider option 3 and keep searching. Let us know what eventually works for you.. unless it's removing the require_tree or installing node.js, there's plenty of that going around already. :)

这篇关于Windows 上的 ExecJS::RuntimeError 试图遵循 ruby​​tutorial的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆