Windows上的ExecJS :: RuntimeError尝试遵循rubytutorial
更新: 科林build议删除行// = require_tree。 已经解决了这个问题。
我已经浪费了2天,试图按照每个build议,并解决我的问题。 我正在尝试遵循http://ruby.railstutorial.org在Windows机器上的书,不能为我的生活过去下面的讨厌的错误。
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
我已经尝试了每个build议,包括使用MSI安装nodejs,使用execjs 1.3.0和其他我什至不能记得的东西。 这是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,但请build议可以帮助我在Windows上开发的变化。 我用rubyinstaller的一切。
我错过了什么?
我的朋友几个月前在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代码。 它会自动select可用的最佳运行时间来评估JavaScript程序,然后将结果作为Ruby对象返回给您。
ExecJS支持这些运行时:
- therubyracer – embedded在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的知识来search其他解决scheme。 我无法告诉你在查看选项1或2时closures的网页有多less是我们接受的解决scheme,然后才find有关我们遇到的根本问题的信息。 我们一直在寻找的唯一原因是,我们不能相信Rails团队会(1)在引起问题的每个脚手架生成的项目中插入一行代码,或者(2)要求我们安装额外的软件来运行默认代码行。 所以我们最终得到了解决根本问题的解决scheme(您的里程可能会有所不同)。
修复工作对我们来说:在系统有问题,findExecJS的runtimes.rb文件。 看起来像这样 复制find的文件进行备份。 打开原始的runtimes.rb进行编辑。 find以行JScript = ExternalRuntime.new(
。在该节中,包含:command => "cscript //E:jscript //Nologo //U",
– 仅删除//U
然后在包含:encoding => 'UTF-16LE' # CScript with //U returns UTF-16LE
内容的行上:encoding => 'UTF-16LE' # CScript with //U returns UTF-16LE
– 将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服务器,并刷新浏览器中产生原始错误的页面。 希望页面现在可以毫无错误地加载。 以下是我们最初发布结果的ExecJS问题线程: https : //github.com/sstephenson/execjs/issues/81#issuecomment-9892952
如果这没有解决这个问题,你总是可以覆盖修改后的runtimes.rb和备份副本(希望),一切都将回到原点。 在这种情况下,考虑选项3并继续search。 让我们知道最终对你有什么作用。除非它删除了require_tree或者安装node.js,这里已经有很多东西了。 🙂
有相同的问题OS- Windows 8错误 – “ExecJS :: RuntimeError …”解决scheme – 缺lessNode.js
我有这个问题,并正在削弱我正在运行Windows 8这个轨道gem文件的互联网
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/安装; – 重新启动机器,一切工作。
我不得不将我的nodejs文件夹添加到我的Windowspath环境variables。 在Windows 8中打开控制面板,进入系统,高级系统设置(在左边),点击左边的环境variables,然后编辑pathvariables以包含目录到你的nodejs文件夹(可能在程序文件中)。
当然你必须安装Node.js(使用Windows安装程序 ),并通过NPM安装了CoffeeScript。
我喜欢学习路线。 这似乎是问题源于
IO.popen(command, options) { |f| output = f.read }
在execjs\external_runtine.rb
返回一个空string(版本1.4.0中的第173行)。 这就是为什么错误消息不包含文本。 build议的更改对我不起作用。 我将UTF-16LE
更改为UTF-8
,但仍返回空string。 我从command
删除了\\U
这至less是返回的文本,但是编码错了 – 在浏览器中显示为中文字符。
根据这个MSDN博客文章 ,使用//U
标志并redirect到一个文件导致cscript
使用UTF-16
返回结果。
然后,神奇的是,它使用command
"cscript //E:jscript //Nologo"
% //&^ @ $%!!!?!?! "cscript //E:jscript //Nologo"
作为"cscript //E:jscript //Nologo"
并且encoding
为"UTF-8"
。 好吧。
我知道这个问题对于这个问题来说是一个非常晚的答案,但是我得到了类似的东西,并且沿着完整的道路去了解究竟是什么导致了这个问题。
原来默认的windows jscript引擎仍然在es3上,很多gem都在利用es5或者es6的function。 不幸的是,如果发生这种情况(您正在使用gem或一些利用es5或es6function的代码),则无法使用本机js引擎在Windows上工作。
这就是安装node.js解决问题的原因(节点至less是es5)。
希望这可以帮助一些与jsexec的运行时错误挣扎的人。
我2美分的build议是安装节点(很容易)或安装V8,而不是删除// = require_tree。
注意execjs将自动使用节点,如果检测到。 否则强制使用,join启动类似于:
ENV['EXECJS_RUNTIME'] = 'Node'
将env设置为节点。
对于Windows用户,这可能工作。 在windows上运行的咖-script-source> 1.9.0有一个问题。
看来你必须把这个添加到你的gemfile中:
gem'咖啡脚本源','1.8.0'
然后做
捆绑更新咖啡脚本源
我尝试了所有上述选项,并混合了它们的几个组合,直到我发现Pages#中的Rails-4,ExecJS :: ProgramError受到欢迎 ,并完成了多个系统gem更新和捆绑安装和更新。
我恢复了所有的审判,并降低了我的咖啡脚本源,它的工作原理。 张贴在这里帮助其他人,谁可能有类似的问题。
更新供应商/caching中的文件
coffee-script-source-1.8.0.gem从vendor / cache中移除过期的.gem文件coffee-script-source-1.9.1.1.gem Bundle已更新!
快速和肮脏的解决scheme:删除//= require_tree .
来自application.js
。
正如我在这个问题的评论中解释的那样,这实际上并没有解决导致错误的根本问题,而只是回避了这个问题。
我使用了2号解决scheme,因为以前我有这个错误,但在这种情况下,没有工作,然后我加了
gem 'coffee-script-source', '1.8.0'
并运行
bundle install
我的问题已经解决了
对于像我这样的初学者:
- 导航到\ app \ views \ layouts \ application.html.erb
-
将第6行更改为:
'<%= javascript_include_tag'应用程式','data-turbolinks-track'=> true%>'
至
<%= javascript_include_tag 'defaults', 'data-turbolinks-track' => true %>
来自教程来修复这里
对于初学者,这是一个不那么复杂的解决scheme:
如果你只是通过教程,你可能正在使用默认的Gemfile(或非常接近)。 您可以在文本编辑器中打开它,并从该行的前面删除井号:
# gem 'therubyracer', :platforms => :ruby
您将需要重新运行bundle install
,这可能会下载一些东西。 但一旦这样做,你应该能够启动服务器没有任何问题。
至less,这对我有效。
顺便说一下,这也适用于Ubuntu 12.04。
运行Win 8 64位rails 4.2.5 ruby 2.1.7
这个为我工作