更新: 建议删除行// =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进行所有操作。
我想念什么?
我的朋友几个月前尝试在Win 8 RTM上进行Rails教程,并遇到了此错误。不知道Windows 7中是否也存在此问题,但这可能会有所帮助。
选项:
1)删除//= require_tree./忽略问题-正如上述ColinR所述,此行首先不应引起问题。ExecJS在系统上的JavaScript运行时下正常工作是一个实际问题,删除此行只是忽略了这一事实。
//= require_tree.
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)
ExecJS使您可以从Ruby运行JavaScript代码。它会自动选择可用于评估JavaScript程序的最佳运行时,然后将结果作为Ruby对象返回给您。
ExecJS支持以下运行时:
(来自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-16LE-将UTF-16LE更改为的行上UTF-8。将更改保存到文件。该文件的这一部分现在应显示为:
JScript = ExternalRuntime.new(
:command => "cscript //E:jscript //Nologo //U",
//U
:encoding => 'UTF-16LE' # CScript with //U returns 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问题线程:
如果这不能解决问题,则始终可以用(希望)制作的备份副本覆盖修改后的runtimes.rb,一切将恢复到原来的状态。在这种情况下,请考虑选项3并继续搜索。让我们知道最终对您有用的..除非删除了require_tree或安装了node.js,否则已经有很多事情发生了。:)