Ruby on rails ExecJS::Say#hello中的RuntimeError

Ruby on rails ExecJS::Say#hello中的RuntimeError,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,对该做什么感到困惑。默认rails由RailsInstaller安装 启动了一个新的演示应用程序。使用rails 3.2.14 创建了一个控制器 rails generate controller Say hello goodbye 但是,每当我导航到localhost时,它都会返回一个execjs错误 所以 http://localhost:3000/say/hello 我收到 ExecJS::RuntimeError in Say#hello Showing c:/work/demo

对该做什么感到困惑。默认rails由RailsInstaller安装

启动了一个新的演示应用程序。使用rails 3.2.14

创建了一个控制器

rails generate controller Say hello goodbye
但是,每当我导航到localhost时,它都会返回一个execjs错误

所以

http://localhost:3000/say/hello
我收到

 ExecJS::RuntimeError in Say#hello

Showing c:/work/demo/app/views/layouts/application.html.erb where line #6 raised:


  (in c:/work/demo/app/assets/javascripts/say.js.coffee)

Extracted source (around line #6):

3: <head>
4:   <title>Demo</title>
5:   <%= stylesheet_link_tag    "application", :media => "all" %>
6:   <%= javascript_include_tag "application" %>
7:   <%= csrf_meta_tags %>
8: </head>
9: <body>

Rails.root: c:/work/demo
我该怎么办

编辑


gemfile.lock

查找ExecJS的
运行时.rb
文件

bundle show execjs

备份。打开
运行时.rb
并编辑。在包含“cscript//E:JScript//Nologo//U”的行中查找以行
JScript=ExternalRuntime.new(
)开头的部分,-仅删除
//U
。现在在包含
的行中:encoding=>'UTF-16LE'#CScript with//U返回UTF-16LE
-change
UTF-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 s,问题应该得到解决。

确保您在资产组下有
gem'therubyracer'
gem'execjs'
,然后运行
bundle install
,您也可以尝试代替execjs

在R&D I安装node.js()问题解决了。

添加gem'execjs'为我做到了。

使用gem安装节点。
我不知道为什么这样做有效,但它有效。

@rmagnum2002添加到PasteBin请阅读他的问题:
我将下面的文件添加到我的Gem文件中,并进行了捆绑更新。
我做了,但可能它们不在资产块内!,这发生在我身上。是的,你是对的,很难说这些宝石放在哪里。
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
)