ruby on rails 中的 Coffeescript 编译错误

Posted

技术标签:

【中文标题】ruby on rails 中的 Coffeescript 编译错误【英文标题】:Coffeescript compilation error in ruby on rails 【发布时间】:2016-06-27 14:26:41 【问题描述】:

我正在使用咖啡脚本+ruby-on-rails。将coffeescript编译成纯JS,如果coffee代码出现语法问题,会报错。在浏览器上运行应用程序时,我收到此错误:ExecJS::RuntimeError

当它试图将coffee代码编译为JS时,有什么方法可以找出导致编译错误的原因吗? 附上报错截图

以下是服务器日志中的条目,它无法指示实际导致语法错误的文件:

ActionView::Template::Error (SyntaxError: [stdin]:25:10: unexpected :):
    4:     <meta name="viewport" content="width=device-width, initial-scale=1.0">
    5:     <title><%= content_for?(:title) ? yield(:title) : "Inmonarch Website" %></title>
    6:     <meta name="description" content="<%= content_for?(:description) ? yield(:description) : "Inmonarch Website" %>">
    7:     <%= stylesheet_link_tag 'application', media: 'all' %>
    8:     <%= javascript_include_tag 'application' %>
    9:     <%= csrf_meta_tags %>
   10:   </head>
  app/views/layouts/dashboard.html.erb:7:in `_app_views_layouts_dashboard_html_erb__3120053487817944018_56303120'


  Rendered /home/vipin8169/.rvm/gems/ruby-2.2.3@rails426/gems/actionpack-4.2.6/lib/action_dispatch/middleware/templates/rescues/_source.erb (7.4ms)
  Rendered /home/vipin8169/.rvm/gems/ruby-2.2.3@rails426/gems/actionpack-4.2.6/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (3.0ms)
  Rendered /home/vipin8169/.rvm/gems/ruby-2.2.3@rails426/gems/actionpack-4.2.6/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.6ms)
  Rendered /home/vipin8169/.rvm/gems/ruby-2.2.3@rails426/gems/actionpack-4.2.6/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout (25.5ms)
  Rendered /home/vipin8169/.rvm/gems/ruby-2.2.3@rails426/gems/web-console-2.3.0/lib/web_console/templates/_markup.html.erb (0.3ms)
  Rendered /home/vipin8169/.rvm/gems/ruby-2.2.3@rails426/gems/web-console-2.3.0/lib/web_console/templates/_inner_console_markup.html.erb within layouts/inlined_string (0.3ms)
  Rendered /home/vipin8169/.rvm/gems/ruby-2.2.3@rails426/gems/web-console-2.3.0/lib/web_console/templates/_prompt_box_markup.html.erb within layouts/inlined_string (0.3ms)
  Rendered /home/vipin8169/.rvm/gems/ruby-2.2.3@rails426/gems/web-console-2.3.0/lib/web_console/templates/style.css.erb within layouts/inlined_string (0.3ms)
  Rendered /home/vipin8169/.rvm/gems/ruby-2.2.3@rails426/gems/web-console-2.3.0/lib/web_console/templates/console.js.erb within layouts/javascript (296.8ms)
  Rendered /home/vipin8169/.rvm/gems/ruby-2.2.3@rails426/gems/web-console-2.3.0/lib/web_console/templates/main.js.erb within layouts/javascript (0.2ms)
  Rendered /home/vipin8169/.rvm/gems/ruby-2.2.3@rails426/gems/web-console-2.3.0/lib/web_console/templates/error_page.js.erb within layouts/javascript (0.3ms)
  Rendered /home/vipin8169/.rvm/gems/ruby-2.2.3@rails426/gems/web-console-2.3.0/lib/web_console/templates/index.html.erb (313.8ms)

PS:-我知道语法错误是什么,我故意犯语法错误是为了找出我是否能够在日志的帮助下追踪错误,但我做不到。

【问题讨论】:

这是一个低质量的答案:根据您的数据,我觉得“SyntaxError: [stdin]:25:10: unexpected :”很有趣 - 您可以挖掘找到该标准输入并尝试查看在第 25 行,符号 10 附近,“:”符号可能有问题。您还可以选择查看“应用程序跟踪”、“框架跟踪”或“完整跟踪” - 通常这些内容也有有趣的信息。 这是另一种低质量的方法:您可以逐步减少您的coffeeScript,逐个丢弃脚本的功能,直到您没有编译错误。这可能表明出现问题的地方。您可以使用外部语法检查器工具来测试您的咖啡脚本代码,因为您似乎有语法错误。 'Application Trace' 'Framework Trace' 或 'Full Trace' 没有任何用处。 25:10 正确地说明了错误的位置,但是我如何知道存在语法错误的文件名? [stdin] 指的是什么? @Carpetsmoker 我没有包含代码,因为它不是必需的。我知道语法错误是什么,我故意犯了语法错误以找出我是否能够在日志的帮助下跟踪错误,而我做不到。因此,我在这里发布了一个问题。 可能我不够清楚。对不起。 【参考方案1】:

一种解决方法是在 rails 外部编译您的 .coffee 文件以获得正确的错误消息:

如果你还没有:

npm i coffee-script -g

然后在您的 .coffee 文件的父目录中:

coffee --output deleteme --compile .

完成后,删除它创建的deleteme 文件夹(仅当您修复所有错误时才会创建该文件夹)。这应该会为您找到语法错​​误并告诉您它的确切位置。

【讨论】:

【参考方案2】:

如果您知道导致错误的咖啡脚本,您可以使用像 http://www.coffeelint.org/ 这样的在线 linter

【讨论】:

如果你有无数的咖啡文件却不知道哪一个有误,那可能会让你发疯!

以上是关于ruby on rails 中的 Coffeescript 编译错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ruby​​ on rails 中访问 rails 助手和嵌入资产 javascript 文件中的 ruby​​?

Ruby on Rails 中的 Runner

ruby on rails 中的 Coffeescript 编译错误

Cpanel 中的 Ruby On Rails 问题

覆盖Ruby on Rails中的保存

ruby on rails 中的 Devkit 函数