バグ #1238
未完了mikutter account コマンドが使えなくなっている
説明
表題の通り。
再現手順
・ mikutter 3.7をcloneして bundle install --path vendor/bundle する。
・ bundle exec ruby mikutter.rb account を実行する。
次のエラーを出力してクラッシュする。
.../mikutter/core/miquire.rb:98:in `require': cannot load such file -- mikutwitter (LoadError)
Izumi Tsutsui さんが6年以上前に更新
以下のパッチ
--- core/boot/shell/account.rb.orig 2018-01-02 11:34:04.902005885 +0900
+++ core/boot/shell/account.rb 2018-05-10 22:21:51.666406250 +0900
@@ -1,8 +1,9 @@
# -*- coding: utf-8 -*-
miquire :boot, 'delayer'
-miquire :lib, 'mikutwitter'
miquire :core, 'plugin'
+miquire :lib, 'twitter'
+miquire :plugin, 'twitter/mikutwitter'
puts "Register new account."
を当てると
Register new account.
までは出ますね。
~/.mikutter/plugin/twitter_api_keys の plugin は見に行ってくれないのか、
core/config.rb の CK/CS を書き換えていない状態だと
401 Authorization Required (OAuth::Unauthorized)
になってしまいますが。
Hiyowa Kyobashi さんが6年以上前に更新
ありがとうございます。
ご指摘のパッチを当ててみたのですが、
/mikutter/core/miquire.rb:98:in `require': cannot load such file -- twitter (LoadError)
となってしまいました。ディレクトリ構造を確認しても、lib以下にtwitter.rbといったファイルは存在しないようです。
パス指定等は合っていますでしょうか。
Izumi Tsutsui さんが6年以上前に更新
あれ? と思って調べたところ mikutter とは関係なく gem で入れた twitter gem を見に行っていたのかもしれません。
試したところ 3.6.8, 3.7.0 いずれも以下だけでRegister new account.
まで出ましたがどうでしょう。
--- a/core/boot/shell/account.rb
+++ b/core/boot/shell/account.rb
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
miquire :boot, 'delayer'
-miquire :lib, 'mikutwitter'
+miquire :plugin, 'twitter/mikutwitter'
miquire :core, 'plugin'
puts "Register new account."
Hiyowa Kyobashi さんが6年以上前に更新
ありがとうございます。無事、pinの入力までは出るようになりました。
が、CS/CKを書き換えた状態でpinを入力すると、以下のエラーが発生し、登録が完了しませんでした。
/home/User/mikutter/core/boot/shell/account.rb:24:in `<top (required)>': uninitialized constant Service (NameError)
from /home/User/mikutter/core/boot/option.rb:73:in `require' from /home/User/mikutter/core/boot/option.rb:73:in `block in parse'
from /home/User/.rbenv/versions/2.4.1/lib/ruby/2.4.0/optparse.rb:1062:in `initialize'
from /home/User/mikutter/core/boot/option.rb:24:in `new'
from /home/User/mikutter/core/boot/option.rb:24:in `parse'
from mikutter.rb:17:in `<main>'
別チケットを切った方がよければそうします。
Izumi Tsutsui さんが6年以上前に更新
適当にいじってみると
--- a/core/boot/shell/account.rb
+++ b/core/boot/shell/account.rb
@@ -1,8 +1,10 @@
# -*- coding: utf-8 -*-
miquire :boot, 'delayer'
-miquire :lib, 'mikutwitter'
miquire :core, 'plugin'
+miquire :lib, 'diva'
+miquire :plugin, 'world/world'
+miquire :plugin, 'twitter/mikutwitter'
puts "Register new account."
2) Login twitter. 3) Input PIN code. PIN code>4849064 Account register failed. uninitialized constant Plugin::Twitter %
うーん。
としぁさんに聞いてみたほうが速そうですが、
twitter plugin はもはや mikutter 本体とは分離されているとすると
結構めんどくさいのかも?
toshi_a 初音 さんが6年以上前に更新
- 題名 を mikutter account コマンドを実行するとLoadErrorで落ちる から mikutter account コマンドが使えなくなっている に変更
- ステータス を 分類待ち から 実装待ち に変更
3.6で忘れられていて使えなくなってるようですね。
サブコマンドは今の所、一切プラグインがロードされない状態で実行されます。
3.5まではTwitterが組み込みだったので、Twitterを担当するコードだけ読み込んでいたのですが、3.6からはTwitterがプラグインとなり、アカウント機能自体もWorldプラグインになったため、新たなアカウントを登録するにはこれらのプラグインをどうしても読み込む必要があります。
幸い、World系プラグインはGUIには依存していないので、一応なんとかなるかなぁ…とは思っています。できるだけ3.7の範囲(バグ修正)で済ませたいですが、Twitter以外のWorldにも対応するのは3.8以降になってしまう可能性もあります。
あひる 家鴨 さんが約6年前に更新
- プラグイン名 を core/boot/shell/account.rb にセット
3.8ですが、とりあえずこんな感じに読み込ませたらもう少し進みました。
--- a/core/boot/shell/account.rb
+++ b/core/boot/shell/account.rb
@@ -1,8 +1,13 @@
# -*- coding: utf-8 -*-
miquire :boot, 'delayer'
-miquire :lib, 'mikutwitter'
miquire :core, 'plugin'
+miquire :lib, 'diva'
+miquire :plugin, 'world/world'
+miquire :plugin, 'twitter/mikutwitter'
+miquire :plugin, 'uitranslator/uitranslator'
+miquire :plugin, 'spell/spell'
+miquire :plugin, 'twitter/twitter'
ただし、(関係あるかはわかりませんが)すでに登録済みのアカウントで試したところ、下記のエラーで落ちました。
Account register failed.
account twitter606860144 already exists.
#<Thread:0x0000557887ce0900@/home/mikutter/mikutter/core/plugin/twitter/mikutwitter/query.rb:41 aborting> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
24: from /home/mikutter/mikutter/core/plugin/twitter/mikutwitter/query.rb:43:in `block in api'
23: from /home/mikutter/mikutter/core/plugin/twitter/mikutwitter/query.rb:79:in `query!'
22: from /home/mikutter/mikutter/core/plugin/twitter/mikutwitter/query.rb:94:in `_query!'
21: from /home/mikutter/mikutter/core/plugin/twitter/mikutwitter/query.rb:30:in `api_lock'
20: from /usr/local/lib/ruby/2.5.0/monitor.rb:226:in `mon_synchronize'
19: from /home/mikutter/mikutter/core/plugin/twitter/mikutwitter/query.rb:95:in `block in _query!'
18: from /home/mikutter/mikutter/core/plugin/twitter/mikutwitter/cache.rb:17:in `cache'
17: from /home/mikutter/mikutter/core/plugin/twitter/mikutwitter/query.rb:96:in `block (2 levels) in _query!'
16: from /home/mikutter/mikutter/core/plugin/twitter/mikutwitter/query.rb:131:in `retry_if_fail'
15: from /home/mikutter/mikutter/core/plugin/twitter/mikutwitter/query.rb:131:in `times'
14: from /home/mikutter/mikutter/core/plugin/twitter/mikutwitter/query.rb:133:in `block in retry_if_fail'
13: from /home/mikutter/mikutter/core/plugin/twitter/mikutwitter/query.rb:97:in `block (3 levels) in _query!'
12: from /home/mikutter/mikutter/core/plugin/twitter/mikutwitter/query.rb:117:in `fire_request_event'
11: from /home/mikutter/mikutter/core/plugin/twitter/mikutwitter/query.rb:117:in `ensure in fire_request_event'
10: from /usr/local/bundle/gems/pluggaloid-1.1.1/lib/pluggaloid/plugin.rb:55:in `call'
9: from /usr/local/bundle/gems/pluggaloid-1.1.1/lib/pluggaloid/event.rb:47:in `call'
8: from /usr/local/bundle/gems/pluggaloid-1.1.1/lib/pluggaloid/event.rb:47:in `new'
7: from /usr/local/bundle/gems/delayer-0.0.2/lib/delayer.rb:49:in `initialize'
6: from /usr/local/bundle/gems/delayer-0.0.2/lib/delayer.rb:49:in `new'
5: from /usr/local/bundle/gems/delayer-0.0.2/lib/delayer/procedure.rb:11:in `initialize'
4: from /usr/local/bundle/gems/delayer-0.0.2/lib/delayer/priority.rb:34:in `register'
3: from /usr/local/bundle/gems/delayer-0.0.2/lib/delayer/priority.rb:34:in `synchronize'
2: from /usr/local/bundle/gems/delayer-0.0.2/lib/delayer/priority.rb:47:in `block in register'
1: from /home/mikutter/mikutter/core/boot/delayer.rb:57:in `block in <top (required)>'
/home/mikutter/mikutter/core/boot/delayer.rb:57:in `wakeup': killed thread (ThreadError)
未登録アカウントでは試していません。
toshi_a 初音 さんが約6年前に更新
よく考えたら抽象化してもWorldに依存してしまうので(mikutter本体にはそもそもアカウントという概念はない)、根本的にはCLIをつけないと解決しませんね。
この機能は一度削除してしまって、拡張可能なCLIを考えたほうが良さそうです。