无效的产量,Ruby 中的语法错误

问题描述 投票:0回答:3

我绝对不是开发人员,但我正在尝试让这个废弃的应用程序正常工作

这是名为layout.erb的文件中的代码,该文件是HTML

<div class="container">
<%= yield %>
</div>

它抛出此错误:

语法错误 - /wallop/app/views/layout.erb:53:无效产量:

我知道他们正在使用 Bootstrap,并且“yield”是 Ruby 中的一个特殊术语,% 应该打印和评估代码——我明白了,我只是不明白为什么它会出错。

这个应用程序是很久以前编写的并被放弃了,开发人员继续前进并制作了它的商业版本,因此他们对帮助更新旧源不感兴趣,我或多或少有兴趣修改它,以便我可以自学 Docker 和其他一些东西。

我没有尝试任何东西,只是研究了错误

我认为这可能与以下事实有关:这是一个旧应用程序,它是用 Ruby 2 编写的,而我正在运行 Ruby 3,但这只是一个猜测。

更新:

这是完全相同的问题,该应用程序也使用 Sinatra / Thin:

https://github.com/mocdaniel/dashing-icinga2/issues/121

他们通过恢复到旧的 Ruby 版本来修复它,但我不确定我是否能够轻松做到这一点

我正在使用 alpine:latest,然后从存储库中运行 apk add ruby-json ruby-dev 和 ruby-bundler,它正在获取最新版本…我不太了解 alpine 或 Docker,无法指定如何获取旧版本版本,我不想手动编译和安装它们。

修复代码以使用 Ruby 3 实际上可能更容易。

ruby syntax yield
3个回答
0
投票

首先,是的,如果应用程序是用 Ruby 2.x 编写的,您应该尝试使用相同的 Ruby 版本来设置它。

如果没有更多背景信息,很难说出问题的根本原因是什么。也许布局中有多个未命名的

yield
语句?您可以在文档中阅读有关布局和渲染的更多信息 - https://guides.rubyonrails.org/layouts_and_rendering.html#understanding-yield


0
投票

我想通了。我怀疑这个问题与 Ruby 3.x 破坏应用程序有关。由于我不是开发人员,最简单的解决方法是不使用 Ruby 3.x。

该应用程序使用像 Thin 和 Sinatra 这样的 gem,由于某种原因,它们在 Ruby 3.x 中被破坏了。

我能够搜索 alpine repo 网站,发现使用 FROM alpine:3.14 的 Docker 基础镜像提取 Ruby 2.7.6 软件包(而不是提取 Ruby 3.x 软件包的 alpine:latest),这解决了问题.


0
投票

当我将运行某些 ruby 2.5 变体的 sinatra 应用程序更新到 3.1 时,我最终通过运行以下命令修复了语法错误:

bundle update --conservative sinatra

基于此答案

这将我的 Gemfile 对 sinatra 的依赖从 1.X 升级到了 4.0

© www.soinside.com 2019 - 2024. All rights reserved.