更新: Colin建议删除//= require_tree行。已解决此问题。
我已经浪费了超过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
我尝试了所有建议,包括使用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,并尝试了各种工具,但是请提出一些建议,以帮助我在Windows上进行开发。我使用rubyinstaller进行所有操作。
我想念什么?
最佳答案
我的 friend 几个月前尝试在Win 8 RTM上进行Rails教程,并遇到了此错误。不确定Windows 7中是否也存在此问题,但这可能会有所帮助。
选项:
1)删除//= require_tree .
/忽略问题-如上面的ColinR所述,此行最初不应引起问题。 ExecJS在系统上的JavaScript运行时下正常工作是一个实际问题,删除这一行只是忽略了这一事实。
2)安装Node.js/逃脱-许多人似乎最终只是安装Node.js并使用它代替了系统上已经存在的JavaScript运行时。虽然这是一个有效的选项,但它还需要其他软件,并且只能避免原始问题,即ExecJS无法与系统中已经存在的JavaScript运行时一起正常工作。如果应该在系统上运行现有的JavaScript运行时,为什么不运行它而不是安装更多软件呢?据ExecJS创建者说,实际上已经支持Windows内置的运行时...
3)实际解决问题/学习-使用选项1和2的知识来搜索其他解决方案。在实际找到有关我们所遇到的根本问题的信息之前,我无法告诉您在看到选项1或2时我关闭了多少个网页。我们一直在寻找的唯一原因是我们无法相信Rails团队(1)在每个产生问题的脚手架生成项目中插入一行代码,或者(2)要求我们安装其他软件才能运行该默认设置代码行。因此,我们最终解决了我们的根本问题(您的里程可能会有所不同)。
对我们有用的修复程序:
在出现问题的系统上,找到ExecJS的 runtimes.rb 文件。看起来像this。复制找到的文件以进行备份。打开原始的runtimes.rb进行编辑。找到以JScript = ExternalRuntime.new(
行开头的部分。在该部分中,在包含:command => "cscript //E:jscript //Nologo //U",
的行上-仅删除//U
。然后在包含: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并继续搜索。让我们知道最终对您有用的..除非要删除require_tree或安装node.js,否则已经有很多事情发生了。 :)