jerry0
(Jerry)
2019 年 9 月 9 日午後 3:05
1
Discourse Assign を使用できるグループのサイト設定を変更したところ、更新ボタンを押した際に深刻な問題が発生し、サイト全体がダウンしてしまいました。
その後、Discourse Assign を無効にしたところサイトは復旧しましたが、再度 Discourse Assign を有効にするとサイトがダウンしてしまい、Discourse Assign プラグインのサイト設定を変更することができません。
エラーログを確認したところ、以下の 2 つのエラーが記録されていました。
ActiveRecord::StatementInvalid (PG::InvalidTextRepresentation: ERROR: invalid input syntax for integer: "patently-staff"
LINE 1: ...RE "group_users"."user_id" = 1 AND (groups.id in ('patently-...
^
: SELECT 1 AS one FROM "groups" INNER JOIN "group_users" ON "groups"."id" = "group_users"."group_id" WHERE "group_users"."user_id" = 1 AND (groups.id in ('patently-staff')) LIMIT 1)
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.0.2/lib/patches/db/pg.rb:69:in `async_exec_params'
および:
Failed to handle exception in exception app middleware : PG::InvalidTextRepresentation: ERROR: invalid input syntax for integer: "patently-staff"
LINE 1: ...RE "group_users"."user_id" = 1 AND (groups.id in ('patently-...
^
: SELECT 1 AS one FROM "groups" INNER JOIN "group_users" ON "groups"."id" = "group_users"."group_id" WHERE "group_users"."user_id" = 1 AND (groups.id in ('patently-staff')) LIMIT 1
pmusaraj
(Penar Musaraj)
2019 年 9 月 9 日午後 3:58
2
あなたのインスタンスで discourse-assign プラグインは最新ですか?それとも、以前にプラグインをフォークしましたか?discourse-assign プラグインには 7 月に 変更 が加えられており、これはあなたが遭遇しているエラーに関連しているようです。
「いいね!」 2
jerry0
(Jerry)
2019 年 9 月 9 日午後 4:05
3
こんにちは、ペナルさん。確かに最新だったと思います。プラグインも含め、私は定期的にすべてを更新しています。
復元するしかないかもしれません。最後のバックアップは、そのサイト設定を変更する前のものでした。
Roman
(Roman Rizzi)
2019 年 9 月 9 日午後 4:54
4
こんにちは、@jerry0 さん、
ログによると、プラグインは最新バージョンのようです。現在、どの Discourse バージョンを実行されていますか?
「いいね!」 2
Roman
(Roman Rizzi)
2019 年 9 月 9 日午後 6:04
6
なるほど、わかりました。設定を変更したのは、beta4 へのアップデートの前ですか、それとも後ですか?
どうやら自動マイグレーションが設定の更新に失敗したようです。なぜそうなったのか調査します。念のため、プラグインを有効にする前にサーバーを再起動してみましたか?もしこれで解決しない場合は、手動で問題を修正するための Ruby スクリプトを提供しますので、お知らせください。
「いいね!」 1
jerry0
(Jerry)
2019 年 9 月 9 日午後 6:15
7
@Roman ありがとうございます。
アップデート前に発生しました。新しい設定を追加する際に奇妙なことが起こり、新しいグループ名を「追加」する前に緑色のチェックマークを押してしまったのだと思います。
その方法がわかりません(なお、OP で「無効化/有効化」と言ったのは誤りだったかもしれません。私が意図したのは、プラグインを追加するために app.yml ファイル内の git clone URL をコメントアウトしたことでした)。yml ファイルにプラグインを追加すると、サイトが即座にクラッシュしてしまいます(以前は有効化されていました)。そのため、サイトに入って無効に設定することができません。私の理解が間違っているのでしょうか?
必要になるかもしれません。ぜひお願いしたいです。
Roman
(Roman Rizzi)
2019 年 9 月 9 日午後 6:21
8
差し支えなければ、設定を手動で変更する前に、もう一点確認させてください。
以下のコードを Rails コンソール内で実行し、出力結果をお知らせいただけますか?
DB.query_single(<<~SQL
SELECT site_settings.value FROM site_settings WHERE site_settings.name = 'assign_allowed_on_groups'
SQL
).first.to_s.split('|')
これにより、設定値のマイグレーションに失敗したかどうかを確認できます。
コンソールにアクセスするには:
Discourse フォルダに cd します
./launcher enter app を実行してコンテナに入ります
rails c を実行して Rails コンソールを開きます
「いいね!」 3
Roman
(Roman Rizzi)
2019 年 9 月 9 日午後 6:37
10
ありがとう、ジェリー。
確かに何か問題が起きているようだ。原因を調べてみる。
スクリプトは以下の通り:
group_id = Group.where(name: 'patently-staff').pluck(:id).join('|')
DB.exec("UPDATE site_settings SET value='#{group_id}' WHERE site_settings.name = 'assign_allowed_on_groups'")
これを実行すれば、プラグインを再度有効化できるはずです。
「いいね!」 7
jerry0
(Jerry)
2019 年 9 月 9 日午後 7:10
12
完璧、成功しました @Roman さん、ありがとうございます。さらにサポートが必要な場合は、お知らせください。
「いいね!」 1
diwr
2019 年 9 月 25 日午前 7:13
13
こんにちは、Roman さん。
当サイトでも 2.4.0beta4 へのアップグレード後、discourse-assign プラグインで同様の問題が発生しています。
この問題は、LDAP 経由でログインするユーザーにのみ発生します(LDAP 接続には “GitHub - jonmbake/discourse-ldap-auth: Discourse plugin to enable LDAP/Active Directory authentication. · GitHub ” を使用しています)。
DB.query への応答は以下の通りです:
=> [“staff”]
しかし、“Group.where(name: ‘staff’).pluck(:id).join(‘|’)” は “” を返します。
参考までに:バージョン “2.4.0.beta1 +203” では応答は同様ですが、LDAP 経由でのログインは可能でした(LDAP バージョン 0.4.0、assign バージョン 0.1)。
ご支援をよろしくお願いいたします。
ありがとうございます、
Frank
Roman
(Roman Rizzi)
2019 年 9 月 25 日午後 12:07
14
こんにちは @diwr さん、
そのクエリによると、staff という名前のグループは存在しません。名前を変更されたのでしょうか?
以下を実行して確認できます:Group.where(id: 3).pluck(:name)
staff グループの名前が変更されている場合、マイグレーションが正常に動作しない可能性があります。本日内に確認いたします。
「いいね!」 2
diwr
2019 年 9 月 25 日午後 12:14
15
@Roman さん、ありがとうございます。
どうやら「team」に名前が変更されたようです。
今からどうすればよいでしょうか?
Roman
(Roman Rizzi)
2019 年 9 月 26 日午後 12:27
16
グループ名として「team」を指定してスクリプトを実行できます。
「いいね!」 4
diwr
2019 年 9 月 26 日午後 1:20
17
@Roman さん
ありがとうございます。
値を設定した後、"./launcher rebuild app"を実行する必要がありましたが、その後うまくいきました。
「いいね!」 6