プロジェクト

全般

プロフィール

環境対応 #1051

memoistを1.16にアップデートすると起動しなくなる

ncaq net約1ヶ月前に追加. 20日前に更新.

ステータス:
終了
優先度:
通常
担当者:
対象バージョン:
開始日:
2017-06-23
期日:
進捗率:

0%

プラグイン名:

説明

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>'

関係しているリビジョン

リビジョン 0b88dd30 (差分)
toshi_a 初音29日前に追加

Module#memoize が呼ばれた時に、自動的にextend Memoistする refs #1051

リビジョン a40cc99a (差分)
toshi_a 初音29日前に追加

memoistのメソッドを使うすべてのModuleにMemoistメソッドをextendする refs #1051

memoist 1.16から、KernelにMemoistをincludeする方法は利用できなくなった
ため、現在のスタンダードに合わせた。

リビジョン aca296fa (差分)
toshi_a 初音24日前に追加

Module#.memoizeが呼ばれたら警告を表示する refs #1051

履歴

#1 toshi_a 初音30日前に更新

再現できました。対応難しそうなら一旦は<=1.15としますが、最終的には1.16でも問題なく使えるようにします。

かつてmemoizable gemを使っていた時はKernelモジュールにincludeするとすべてのメソッドがメモ化可能になっていて、memoist gemに乗り換えたとき(#755)も同じことが出来たのですが、コードを読んでいるとその方法は想定されてないのかな(READMEにもそういう使い方に関する言及がない)。
経緯の想像はつくけれど、かなり多くの場所に extend Memoist を入れなければならない?

#2 toshi_a 初音29日前に更新

  • 担当者toshi_a 初音 にセット

一応すべてのmemoize使っているクラスにextend Memoistを入れたら起動するけど、以前まではmemoizeはmikutterのすべての場所で使えたので、これは非互換な変更となり、一部サードパーティプラグインがクラッシュする可能性があります。
mikutter 3.5系は memoist <1.16 とするのが良いんですが、だいたいのディストリにとって意味がないので、memoist 1.16でも同じように動作させる方法を探っています。

#3 toshi_a 初音29日前に更新

  • ステータス新規 から 進行中 に変更

二案。

memoistを利用するすべてのModuleにMemoistをextendする (topic/1051-memoist-1.16)

正しい使い方に愚直に合わせる。vanillaでは正しく動作しているがサードパーティプラグインの互換性問題がある。

Module#.memoize が呼ばれたらMemoistをextendする (topic/1051-memoist-auto-extend)

互換性の問題を解決したもの。
ゴリ押し感が強いので、長期に渡ってはやりたくない気がする。Module#.memoizeが呼ばれたら警告を表示するなどして、基本的にMemoistをextendしてもらうようにするか。

#4 toshi_a 初音24日前に更新

今後は、memoizeメソッドを利用する場合は、そのClassやModuleにMemoistをextendするという、memoistのマニュアルに書いてある方法をmikutterプラグインにも利用してもらうようにします。そのうえで、Module#.memoizeも実装しておいて、extendしていない旧来のプラグインも利用できるようにします。その場合はmemoizeが呼ばれた時に警告を発生させます。

この警告が表示されるようになってしまったプラグインは、memoistの使い方 を参考に書き直すべきです。memoistはもともと利用するClassやModuleにextendするのが正しい使い方だったので、そのような書き換えを行っても、memoist 1.15以前+mikutter 3.5.8以前を利用している環境でも正しく動きます。

#5 toshi_a 初音24日前に更新

  • ステータス進行中 から レビュー待ち に変更
  • 担当者toshi_a 初音 から ncaq net に変更

hotfix/3.5 ブランチにmergeしました。年のためそちらの環境でもこのブランチでの確認をお願いします。
もし正しく動作すればチケットのステータスを「終了」に、なにか問題が発生する場合は「まだダメ」に変えたうえで、どういった問題が起こったかを注記に書いてください。

#6 ncaq net20日前に更新

  • ステータスレビュー待ち から 終了 に変更

hotfix/3.5での起動を確認しました.
返信が遅くなり申し訳ありません.

他の形式にエクスポート: Atom PDF