環境対応 #1051
closedmemoistを1.16にアップデートすると起動しなくなる
Description
memoistを1.16にアップデートすると起動しなくなります.
memoistを1.15に戻したところ正常に稼働しました.
どうもmemoistにはそれを直すコミット
https://github.com/matthewrudy/memoist/commit/d3052454e14f6461f26b7a02153e4daa7d525b60
が入っているみたいですが,mikutterはextend Memoistしていないためその恩恵を受けることが出来ません.
これがmemoistの仕様なのかバグなのか今一つわからないため,とりあえずmikutterが動かなくなるという情報を上げさせていただきました.
エラー内容
% mikutter /usr/lib64/ruby/gems/2.3.0/gems/memoist-0.16.0/lib/memoist.rb:142:in `block (2 levels) in memoize': undefined local variable or method `memoized_methods' for ConfigLoader:Module (NameError) Did you mean? unmemoized_method from /usr/lib64/ruby/gems/2.3.0/gems/memoist-0.16.0/lib/memoist.rb:56:in `class_eval' from /usr/lib64/ruby/gems/2.3.0/gems/memoist-0.16.0/lib/memoist.rb:56:in `memoist_eval' from /usr/lib64/ruby/gems/2.3.0/gems/memoist-0.16.0/lib/memoist.rb:132:in `block in memoize' from /usr/lib64/ruby/gems/2.3.0/gems/memoist-0.16.0/lib/memoist.rb:128:in `each' from /usr/lib64/ruby/gems/2.3.0/gems/memoist-0.16.0/lib/memoist.rb:128:in `memoize' from /usr/share/mikutter/core/configloader.rb:116:in `<module:ConfigLoader>' from /usr/share/mikutter/core/configloader.rb:20:in `<top (required)>' from /usr/lib64/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require' from /usr/lib64/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require' from /usr/share/mikutter/core/miquire.rb:98:in `miquire_original_require' from /usr/share/mikutter/core/miquire.rb:95:in `file_or_directory_require' from /usr/share/mikutter/core/miquire.rb:76:in `block in miquire' from /usr/share/mikutter/core/miquire.rb:75:in `each' from /usr/share/mikutter/core/miquire.rb:75:in `miquire' from /usr/share/mikutter/core/miquire.rb:18:in `miquire' from /usr/share/mikutter/core/service.rb:5:in `<top (required)>' from /usr/lib64/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require' from /usr/lib64/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require' from /usr/share/mikutter/core/miquire.rb:98:in `miquire_original_require' from /usr/share/mikutter/core/miquire.rb:95:in `file_or_directory_require' from /usr/share/mikutter/core/miquire.rb:76:in `block in miquire' from /usr/share/mikutter/core/miquire.rb:75:in `each' from /usr/share/mikutter/core/miquire.rb:75:in `miquire' from /usr/share/mikutter/core/miquire.rb:18:in `miquire' from /usr/share/mikutter/mikutter.rb:38:in `<main>'
Updated by toshi_a 初音 over 7 years ago
再現できました。対応難しそうなら一旦は<=1.15としますが、最終的には1.16でも問題なく使えるようにします。
かつてmemoizable gemを使っていた時はKernelモジュールにincludeするとすべてのメソッドがメモ化可能になっていて、memoist gemに乗り換えたとき(#755)も同じことが出来たのですが、コードを読んでいるとその方法は想定されてないのかな(READMEにもそういう使い方に関する言及がない)。
経緯の想像はつくけれど、かなり多くの場所に extend Memoist
を入れなければならない?
Updated by toshi_a 初音 over 7 years ago
- Assignee set to toshi_a 初音
一応すべてのmemoize使っているクラスにextend Memoistを入れたら起動するけど、以前まではmemoizeはmikutterのすべての場所で使えたので、これは非互換な変更となり、一部サードパーティプラグインがクラッシュする可能性があります。
mikutter 3.5系は memoist <1.16 とするのが良いんですが、だいたいのディストリにとって意味がないので、memoist 1.16でも同じように動作させる方法を探っています。
Updated by toshi_a 初音 over 7 years ago
- Status changed from 新規 to 実装待ち
二案。
memoistを利用するすべてのModuleにMemoistをextendする (topic/1051-memoist-1.16)¶
正しい使い方に愚直に合わせる。vanillaでは正しく動作しているがサードパーティプラグインの互換性問題がある。
Module#.memoize が呼ばれたらMemoistをextendする (topic/1051-memoist-auto-extend)¶
互換性の問題を解決したもの。
ゴリ押し感が強いので、長期に渡ってはやりたくない気がする。Module#.memoizeが呼ばれたら警告を表示するなどして、基本的にMemoistをextendしてもらうようにするか。
Updated by toshi_a 初音 over 7 years ago
今後は、memoizeメソッドを利用する場合は、そのClassやModuleにMemoistをextendするという、memoistのマニュアルに書いてある方法をmikutterプラグインにも利用してもらうようにします。そのうえで、Module#.memoizeも実装しておいて、extendしていない旧来のプラグインも利用できるようにします。その場合はmemoizeが呼ばれた時に警告を発生させます。
この警告が表示されるようになってしまったプラグインは、memoistの使い方 を参考に書き直すべきです。memoistはもともと利用するClassやModuleにextendするのが正しい使い方だったので、そのような書き換えを行っても、memoist 1.15以前+mikutter 3.5.8以前を利用している環境でも正しく動きます。
Updated by toshi_a 初音 over 7 years ago
- Status changed from 実装待ち to レビュー待ち
- Assignee changed from toshi_a 初音 to ncaq エヌユル
hotfix/3.5 ブランチにmergeしました。年のためそちらの環境でもこのブランチでの確認をお願いします。
もし正しく動作すればチケットのステータスを「終了」に、なにか問題が発生する場合は「まだダメ」に変えたうえで、どういった問題が起こったかを注記に書いてください。
Updated by ncaq エヌユル over 7 years ago
- Status changed from レビュー待ち to 終了
hotfix/3.5での起動を確認しました.
返信が遅くなり申し訳ありません.