【问题标题】:Sinatra App Works Locally but Internal Server Error on HerokuSinatra 应用程序在本地工作,但在 Heroku 上出现内部服务器错误
【发布时间】:2017-03-17 06:36:28
【问题描述】:

在我看来,导致问题的相关代码似乎是这样的:

<input type="checkbox" id=<%= "#{a[0]}#{ndx}" -%> class="toggle" />
        <label for=<%= "#{a[0]}#{ndx}" -%> class="popup-label">

这会在 Heroku 日志中引发以下错误:

SyntaxError - /app/views/index.erb:25: syntax error, unexpected ')'
2017-03-17T06:30:26.877056+00:00 app[web.1]: ...buf.concat(( "#{a[0]}#{ndx}" -).to_s); @_out_buf.concat " cl...
2017-03-17T06:30:26.877061+00:00 app[web.1]: /app/views/index.erb:26: syntax error, unexpected ')'
2017-03-17T06:30:26.877057+00:00 app[web.1]: ...                               ^
2017-03-17T06:30:26.877061+00:00 app[web.1]: ...buf.concat(( "#{a[0]}#{ndx}" -).to_s); @_out_buf.concat " cl...

我最初认为这可能是使用 WEBrick 和 Puma 之间的区别,但我交换了它们并发现没有区别。有什么建议吗?

【问题讨论】:

  • ERB 错误消息中的行号不一定指向错误所在的行。但是到 ERB 注意到结构无效的那一行。在该行之前发现了语法错误本身(在这种情况下可能是一个孤立的()。请发布您的完整视图。请说明您使用的是哪种 ERB 实现。
  • 我不确定我是否理解。您所说的“ERB 的实施方式”是什么意思?此外,语法错误显然是由 erb 语句结束时的 - 引起的。
  • 在我看来,您在本地和服务器上运行不同版本的 gems。你在用bundler吗?
  • ERB 是某种定义或语言,如何使用 &lt;% %&gt; 标签从 Ruby 生成 HTML。 ERB 有不同的实现:来自 Ruby 标准库的原始版本,但也有像 Erubis、Erubi 这样更快的替代方案,但行为可能略有不同。尤其是 Erubis 和 Erubis 不需要 -%&gt; 中的减号。当您在开发和生产中使用不同的实现时,这可能说明您在一个环境中遇到错误,而在另一个环境中却没有。
  • @froderik -- 我正在使用捆绑程序。 Gem 版本是相同的,不确定错误中的其他含义。

标签: ruby heroku sinatra erb


【解决方案1】:

请尝试以下方法

<input type="checkbox" id="<%= a[0].to_s + ndx.to_s  %>" class="toggle" />
<label for="<%= a[0].to_s + ndx.to_s %>" class="popup-label">

【讨论】:

  • 实际上所有需要的只是从“-%>”中删除“-”。不过现在有一个不同的问题。它启动但不呈现与本地相同。
  • 但与本地渲染不同。这是什么意思 ?你在你的代码上连接 ndxa[0] 我做了同样的事情
  • 我的意思是当我解决这个问题时,我发现了一个单独的问题。字符串转换不是问题。你的方法很好,但问题是我原始代码中的 -%> 。新问题与 CSS 有关。我正在使用复选框 hack 创建一个包含其他信息的弹出窗口。它在这里工作得很好,但是当复选框未选中时,heroku 不会隐藏 div。它也不会隐藏复选框,因为我希望标签触发弹出窗口。
  • stackoverflow.com/questions/998979/… 这是 %> 和 -%> 的区别
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
  • 2018-10-22
相关资源
最近更新 更多