Techioz Blog

無効な収量、Ruby の構文エラー

概要

私はまったく開発者ではありませんが、この放棄されたアプリを動作させようとしています

これは、HTML であるlayout.erb というファイル内のコードです。

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

このエラーがスローされます:

構文エラー - /wallop/app/views/layout.erb:53: 無効な収量:

彼らがBootstrapを使用していること、そして「yield」がRubyの特別な用語であり、%がコードを出力して評価することになっているということは理解しています。すべて理解していますが、なぜエラーが発生するのかわかりません。

このアプリはずっと前に書かれて放棄されましたが、開発者は次のステップに進み、その商用版を作成しました。そのため、彼らは古いソースの更新を手伝うことには興味がありません。私は教えるためにそれをいじることに多かれ少なかれ興味があります。私自身も Docker とその他のことをしています。

何も試していませんが、エラーを調べただけです

これは古いアプリで Ruby 2 で書かれており、私が Ruby 3 を実行しているという事実と関係があるのかもしれないと思いますが、それは単なる推測です。

アップデート:

これはまったく同じ問題で、アプリも Sinatra / Thin を使用しています。

https://translate.google.com/translate?hl=ja&sl=en&tl=ja&u=https://github.com/mocdaniel/dashing-icinga2/issues/121

Ruby の古いバージョンに戻すことで修正されましたが、それが簡単にできるかどうかはわかりません

alpine:latestを使用し、リポジトリからapk addruby-jsonruby-devとruby-bundlerを実行すると、最新バージョンが取得されます…古いバージョンを取得する方法を指定できるほどalpineやDockerのことをよく知りません手動でコンパイルしてインストールすることは避けたいと思います。

実際には、Ruby 3 で動作するようにコードを修正するだけの方が簡単かもしれません。

解決策

まず第一に、そうです。アプリケーションが Ruby 2.x で書かれている場合は、同じ Ruby バージョンを使用してセットアップする必要があります。

さらなるコンテキストがなければ、問題の根本原因が何であるかを言うのは困難です。レイアウト内に複数の名前のない yield ステートメントがある可能性がありますか?レイアウトとレンダリングの詳細については、ドキュメントを参照してください - https://guides.rubyonrails.org/layouts_and_rendering.html# Understanding-yield