提案 #1419
完了環境固有のプラグインロードパスを追加する方法
Izumi Tsutsui さんがほぼ6年前に追加. 3年以上前に更新.
説明
てオフでの会話でチケット入れてほしいとのことだったのでとりあえずパッチなしですが提案でチケット入れます。
やりたいこと¶
mikutter で plugin をロードする際に探索するディレクトリを追加できるようにしたい。
背景¶
pkgsrc を含むパッケージシステムとして
twitter plugin を始めとする「mikutter プラグインのパッケージ」
というものが欲しい、というモチベが出てくると思われる。
Twitter は入れるプログインが多いので。
実装案¶
- コマンドラインオプションで追加の探索ディレクトリを追加する
- source'core/boot/load_plugin.rb をパッチして Plugin.loadpathに追加する
- config.rb かなんかをどうにかする
進め方¶
としぁさんがなんとかしてくれるに違いない
その他¶
Twitter 関連プラグインにリリースタグがつくとやりやすいです(とついでにメモ)
       toshi_a 初音 さんがほぼ6年前に更新
      toshi_a 初音 さんがほぼ6年前に更新
      
      
    
    - ステータス を 実装待ち から レビュー待ち に変更
- 担当者 を Izumi Tsutsui にセット
- ブランチ を topic/1419-plugin-loadpath にセット
config.rbに雑に足せるようにしてみたよ
       Izumi Tsutsui さんが5年以上前に更新
      Izumi Tsutsui さんが5年以上前に更新
      
      
    
    - ステータス を レビュー待ち から マージ待ち に変更
レビュー依頼をめっちゃ忘れてたんですが、いまさらながら 4.1.0ーalpha2 で確認してOKでした。
本体のプラグインとローカルで追加するプラグインはディレクトリをわけないと
複数の環境で使いまわすのが面倒なのに、 pkgsrc は OSC東京駆動のせいで
このチケットのこと忘れてて本体プラグインと同じところに突っ込んでしまったので
4.1 でどうするか考えます。
       Izumi Tsutsui さんが約5年前に更新
      Izumi Tsutsui さんが約5年前に更新
      
      
    
    鶏頭で #note-4 でどういうテストをしたのか忘却の彼方になってしまったのですが
環境変数 PLUGIN_PATH に追加したいロードパスの文字列を追加すればいいんでしたっけ……。
(いまさらながら 4.1.0 で追試したら追加したロードパスのプラグインが読まれていないっぽい)
       toshi_a 初音 さんが約5年前に更新
      toshi_a 初音 さんが約5年前に更新
      
      
    
    ソースコードを直接修正して、以下に書き足します。
たしか、パッケージを配布するときにこういうことをしたいということだったので、この仕様になったんでしたっけ(よく憶えていない)
       Izumi Tsutsui さんが約5年前に更新
      Izumi Tsutsui さんが約5年前に更新
      
      
    
    toshi_a 初音 さんは #note-7 で書きました:
ソースコードを直接修正して、以下に書き足します。
たしか、パッケージを配布するときにこういうことをしたいということだったので、この仕様になったんでしたっけ(よく憶えていない)
経緯としては、パッケージシステムでプラグインを入れるときに本体とは別の場所に入れたいのですが、という話だったと思います。
実装としては、 config.rb をいじる、という案を聞いたのみで、具体的にどういう設定をするかまでは話をしなかったような。
- 本体はもともと /usr/pkg/share/mikutter以下に入りデフォルトのプラグインは/usr/pkg/share/mikutter/plugin以下にある
- config.rb をパッチして以下を追加するFile.expand_path(File.join(__dir__, '..', 'plugin-pkgsrc')), 
- pkgsrc の mikutter twitter plugin パッケージとして Twitter プラグイン一式を /usr/pkg/share/mikutter/plugin-plugin以下に入れる
としてみたところ、以下のエラーになりました。なんか間違えているでしょうか。
mirage-% mikutter
#<Thread:0xb43ed3e8@/usr/pkg/share/mikutter/plugin-pkgsrc/twitter/mikutwitter/query.rb:41 run> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
        14: from /usr/pkg/share/mikutter/plugin-pkgsrc/twitter/mikutwitter/query.rb:43:in `block in api'
        13: from /usr/pkg/share/mikutter/plugin-pkgsrc/twitter/mikutwitter/query.rb:79:in `query!'
        12: from /usr/pkg/share/mikutter/plugin-pkgsrc/twitter/mikutwitter/query.rb:94:in `_query!'
        11: from /usr/pkg/share/mikutter/plugin-pkgsrc/twitter/mikutwitter/query.rb:30:in `api_lock'
        10: from /usr/pkg/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
         9: from /usr/pkg/share/mikutter/plugin-pkgsrc/twitter/mikutwitter/query.rb:95:in `block in _query!'
         8: from /usr/pkg/share/mikutter/plugin-pkgsrc/twitter/mikutwitter/cache.rb:17:in `cache'
         7: from /usr/pkg/share/mikutter/plugin-pkgsrc/twitter/mikutwitter/query.rb:96:in `block (2 levels) in _query!'
         6: from /usr/pkg/share/mikutter/plugin-pkgsrc/twitter/mikutwitter/query.rb:131:in `retry_if_fail'
         5: from /usr/pkg/share/mikutter/plugin-pkgsrc/twitter/mikutwitter/query.rb:131:in `times'
         4: from /usr/pkg/share/mikutter/plugin-pkgsrc/twitter/mikutwitter/query.rb:133:in `block in retry_if_fail'
         3: from /usr/pkg/share/mikutter/plugin-pkgsrc/twitter/mikutwitter/query.rb:97:in `block (3 levels) in _query!'
         2: from /usr/pkg/share/mikutter/plugin-pkgsrc/twitter/mikutwitter/query.rb:114:in `fire_request_event'
         1: from /usr/pkg/share/mikutter/plugin-pkgsrc/twitter/mikutwitter/query.rb:98:in `block (4 levels) in _query!'
/usr/pkg/share/mikutter/plugin-pkgsrc/twitter/mikutwitter/connect.rb:79:in `query_with_oauth!': Rate limit https://api.twitter.com/1.1/account/verify_credentials.json (MikuTwitter::RateLimitError)
Traceback (most recent call last):
        52: from /usr/pkg/share/mikutter/mikutter.rb:54:in `<main>'
        51: from /usr/pkg/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
        50: from /usr/pkg/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
        49: from /usr/pkg/share/mikutter/core/boot/load_plugin.rb:13:in `<top (required)>'
        48: from /usr/pkg/share/mikutter/core/miquire_plugin.rb:98:in `load_all'
        47: from /usr/pkg/share/mikutter/core/miquire_plugin.rb:38:in `each_spec'
        46: from /usr/pkg/share/mikutter/core/miquire_plugin.rb:35:in `each'
        45: from /usr/pkg/share/mikutter/core/miquire_plugin.rb:35:in `each'
        44: from /usr/pkg/share/mikutter/core/miquire_plugin.rb:40:in `block in each_spec'
        43: from /usr/pkg/share/mikutter/core/miquire_plugin.rb:99:in `block in load_all'
        42: from /usr/pkg/share/mikutter/core/miquire_plugin.rb:149:in `load'
        41: from /usr/pkg/share/mikutter/core/utils.rb:288:in `atomic'
        40: from /usr/pkg/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
        39: from /usr/pkg/share/mikutter/core/utils.rb:288:in `block in atomic'
        38: from /usr/pkg/share/mikutter/core/miquire_plugin.rb:150:in `block in load'
        37: from /usr/pkg/share/mikutter/core/miquire_plugin.rb:150:in `each'
        36: from /usr/pkg/share/mikutter/core/miquire_plugin.rb:151:in `block (2 levels) in load'
        35: from /usr/pkg/share/mikutter/core/miquire_plugin.rb:149:in `load'
        34: from /usr/pkg/share/mikutter/core/utils.rb:288:in `atomic'
        33: from /usr/pkg/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
        32: from /usr/pkg/share/mikutter/core/utils.rb:288:in `block in atomic'
        31: from /usr/pkg/share/mikutter/core/miquire_plugin.rb:150:in `block in load'
        30: from /usr/pkg/share/mikutter/core/miquire_plugin.rb:150:in `each'
        29: from /usr/pkg/share/mikutter/core/miquire_plugin.rb:151:in `block (2 levels) in load'
        28: from /usr/pkg/share/mikutter/core/miquire_plugin.rb:149:in `load'
        27: from /usr/pkg/share/mikutter/core/utils.rb:288:in `atomic'
        26: from /usr/pkg/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
        25: from /usr/pkg/share/mikutter/core/utils.rb:288:in `block in atomic'
        24: from /usr/pkg/share/mikutter/core/miquire_plugin.rb:159:in `block in load'
        23: from /usr/pkg/share/mikutter/core/miquire_plugin.rb:159:in `load'
        22: from /usr/pkg/share/mikutter/plugin/world/world.rb:9:in `<top (required)>'
        21: from /usr/pkg/lib/ruby/gems/2.6.0/gems/pluggaloid-1.5.0/lib/pluggaloid/plugin.rb:39:in `create'
        20: from /usr/pkg/lib/ruby/gems/2.6.0/gems/pluggaloid-1.5.0/lib/pluggaloid/plugin.rb:39:in `instance_eval'
        19: from /usr/pkg/share/mikutter/plugin/world/world.rb:79:in `block in <top (required)>'
        18: from /usr/pkg/lib/ruby/gems/2.6.0/gems/pluggaloid-1.5.0/lib/pluggaloid/plugin.rb:190:in `collection'
        17: from /usr/pkg/share/mikutter/plugin/world/world.rb:80:in `block (2 levels) in <top (required)>'
        16: from /usr/pkg/lib/ruby/gems/2.6.0/gems/pluggaloid-1.5.0/lib/pluggaloid/collection.rb:29:in `rewind'
        15: from /usr/pkg/share/mikutter/plugin/world/world.rb:80:in `block (3 levels) in <top (required)>'
        14: from /usr/pkg/share/mikutter/plugin/world/world.rb:39:in `load_world'
        13: from /usr/pkg/share/mikutter/plugin/world/world.rb:39:in `map'
        12: from /usr/pkg/share/mikutter/plugin/world/world.rb:39:in `each'
        11: from /usr/pkg/share/mikutter/plugin/world/world.rb:44:in `block in load_world'
        10: from /usr/pkg/share/mikutter/core/miquire_plugin.rb:149:in `load'
         9: from /usr/pkg/share/mikutter/core/utils.rb:288:in `atomic'
         8: from /usr/pkg/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
         7: from /usr/pkg/share/mikutter/core/utils.rb:288:in `block in atomic'
         6: from /usr/pkg/share/mikutter/core/miquire_plugin.rb:159:in `block in load'
         5: from /usr/pkg/share/mikutter/core/miquire_plugin.rb:159:in `load'
         4: from /usr/pkg/share/mikutter/plugin/mastodon/mastodon.rb:19:in `<top (required)>'
         3: from /usr/pkg/lib/ruby/gems/2.6.0/gems/pluggaloid-1.5.0/lib/pluggaloid/plugin.rb:39:in `create'
         2: from /usr/pkg/lib/ruby/gems/2.6.0/gems/pluggaloid-1.5.0/lib/pluggaloid/plugin.rb:39:in `instance_eval'
         1: from /usr/pkg/share/mikutter/plugin/mastodon/mastodon.rb:42:in `block in <top (required)>'
/usr/pkg/lib/ruby/gems/2.6.0/gems/pluggaloid-1.5.0/lib/pluggaloid/plugin.rb:321:in `method_missing': undefined method `defactivity' for #<Plugin:0xb403221c> (NoMethodError)
Did you mean?  activity
mirage-%
       Izumi Tsutsui さんがほぼ4年前に更新
      Izumi Tsutsui さんがほぼ4年前に更新
      
      
    
    Izumi Tsutsui さんは #note-8 で書きました:
としてみたところ、以下のエラーになりました。なんか間違えているでしょうか。
1: from /usr/pkg/share/mikutter/plugin/mastodon/mastodon.rb:42:in `block in <top (required)>' /usr/pkg/lib/ruby/gems/2.6.0/gems/pluggaloid-1.5.0/lib/pluggaloid/plugin.rb:321:in `method_missing': undefined method `defactivity' for #<Plugin:0xb403221c> (NoMethodError) Did you mean? activity
ふと思い出してので、超いまさらながら調べたところ、単に
 mastodon プラグインで defactivity を参照してるのに source:plugin/mastodon/.mikutter.yml@146abc89 で activity プラグインを指定していない
という潜在問題がロード順によってはたまたま発現しなかったのが PLUGIN_PATH を分けたら表に出てきたということっぽいです。
チケット入れます。