【发布时间】:2012-04-18 22:29:49
【问题描述】:
我目前在rails 项目中使用spinejs 和eco 模板系统。它在我的 Mac 上完美运行,但是当我在 Windows 上部署它时出现奇怪的缩进错误。代码是:
<div class="contacts">
<% for contact_record in @unchecked_contact_records : %>
<%= contact_record %><br>
<% end %>
</div>
错误信息是:
ExecJS::ProgramError in Admin#dashboard
Showing C:/Users/rayshih.mama-PC/workspace/showwin_ror_1_5/app/views/layouts/application.html.erb where line #6 raised:
Error: Parse error on line 2: Unexpected 'INDENT'
(in C:/Users/rayshih.mama-PC/workspace/showwin_ror_1_5/app/assets/javascripts/admin/views/dashboard/contacts.jst.eco)
Extracted source (around line #6):
3: <head>
4: <title>Show Win Printing Service</title>
5: <%= stylesheet_link_tag "application" %>
6: <%= javascript_include_tag "application" %>
7: <%= csrf_meta_tags %>
8: </head>
9: <body>
我认为这只是块语句的问题,但是通过这个实验:
<div class="contacts">
<% if true: %>
<%= "hello world" %><br>
<% end %>
</div>
在这个实验中,没有错误。所以这不是块语句错误。似乎它只发生在 for 循环语句中,但为什么呢?
【问题讨论】:
-
可能是终端问题吗?您在 Windows 上的文件有 CR-LF 行结尾还是只有 LF?
-
目前只是LF,但以上两种情况都是LF。一个可以,一个不行:(
-
我也试过 CR-LFs 行尾,还是不行:(
-
那么这实际上是一个与 Ruby 或 Rails 无关的 JavaScript 问题?
-
Rails 会调用 ExecJS 运行 ECO 系统编译模板,这个过程是在服务器端完成的。我猜问题是在生态系统将模板编译为coffeescript后,它会保存到一个临时文件,然后再次读取它以编译为javascript。
标签: javascript ruby-on-rails windows spine.js eco