rails6.0から、variantとhandlerが違う場合に異なるテンプレートが選ばれるようになった
https://github.com/rails/rails/issues/37021
再現コードはissueに書いている通りで。 variantとhandlerが違うとこれが起きる。
railsのソースをステップ実行して確認してると、上記の条件でテンプレートが返ってくる順番が確かに変わっていた。
どうやら、バリアント違いのテンプレートはハンドラは一緒やろ〜〜みたいなノリっぽいです。
issueにコメントを誰もしていないので、みなさんはハンドラーを揃えている、ということがわかる。
ちなみに、うちのプロジェクトはmustacheとerbが混在している。一応mustacheをやめるという意思決定はできているのだが、書き換えが果てしなくめんどくさすぎるので、mustacheを生かし続けてた結果、 index.html+mobile.mustache
と index.html.erb
というテンプレート構成になっていた。その結果、本不具合を踏んでしまった。
mustacheの駆逐よりも、先にrails6.0にしたいと思った(セキュリティパッチ的な意味で)ので、5.2と同じ動作にするためのパッチを作ってみたけど、mustacheテンプレートの出力で文字をしてしまった。ファイルの順番を変えるだけでは不十分で、ハンドラー周りも何か変更が必要らしい。(意味わからん)
エラーが起きるならまだしも意味不明すぎるので、諦めてmustacheの駆逐を先にすることにした。
class ActionView::OptimizedFileSystemResolver
def find_template_paths_from_details(path, details)
query = build_query(path, details)
find_template_paths(query)
end
end
end
おわりです
<追記>
文字化けするのはmustacheがrails6に対応できていなくてバグっているから、の可能性が高いということがわかった。
-
category:
- ruby tags: