eviltrout
(Robin Ward)
2019 年 3 月 28 日午後 4:50
1
数ヶ月にわたって開発されてきたレビューキュー をマージしました。この機能は当社のサーバーでしばらく運用されており、複数の開発者の手を経てきたため、tests-passed ブランチを追っている Discourse ユーザーによるテストを開始するのに十分な状態です。
以下はコミットからのメモです。
これは大規模なリファクタリングであり、コア Discourse 内のすべてのレビュー対象アイテム(ユーザー、キューイングされた投稿、フラグ)を1つの統合されたレビューキューにマージするものです。
新機能
すべてのコンテンツをレビューできる便利な場所
レビュー対象アイテムは裏側でスコアリングされ、優先度の高いアイテムが優先して表示されます。スタッフメンバーや上位の信頼レベルを持つユーザーが生成したアイテムは、より高い優先度を持ちます。
レビューキューをステータス、優先度、レビュー対象タイプ、カテゴリ、ユーザーでフィルタリングできます
レビュー対象の API は、アイテムに対して実行可能なアクションのリストを返すため、フロントエンドアプリケーションはよりシンプルになり、すべてのロジックを重複させる必要がなくなります。
近い将来、スタッフレベル以外のモデレーションを可能にするためのデータ構造が構築されています
ソフトウェア設計上の注意点
Reviewable モデルは単一テーブル継承(STI)を使用しており、各タイプのレビュー対象アイテムはサブクラス、シリアライザー、Ember コンポーネントを宣言する必要があります。現在、3 つのタイプが存在します:ReviewableQueuedPost、ReviewableUser、ReviewableFlaggedPost。開発者は、他のレビュー対象アイテムの実装方法を確認し、独自の機能を作成することを推奨します。
投稿アクション(フラグなど)は、PostActionCreator サービスオブジェクトを使用して作成する必要があります。このサービスオブジェクトはより使いやすい API になり、関連するレビュー対象アイテムを返す結果オブジェクトを返します。
後方互換性
REST API は古いエンドポイントのまま維持されていますが、非推奨の警告がログに記録されます。古い API を参照しているサードパーティのコードは、新しいレビューキュー API に更新する必要があります。ユーザー承認/フラグ付けインターフェース/キューイングされた投稿に関するすべての Ember.js/フロントエンドコードは削除されました。
将来のリリースでは、古い API と後方互換性が削除されます。
フィードバックやバグレポートは、このトピックをご利用ください。できるだけ迅速に対応いたします!
「いいね!」 47
After upgrading from Discourse 2.3.0 beta 5 to beta 6 I now have 14 new notifications in the new /review page, all regarding users that need to be approved.
Those users are either user accounts we rejected weeks ago or banned users, though.
If I clikc on the “Reject” button I get an error message “Sorry, an error has occurred” (see picture below).
TLDR version, I have 14 notifications about already rejected/banned users and I cannot find a way to get rid of them
「いいね!」 6
j.jaffeux
(Joffrey Jaffeux)
2019 年 3 月 29 日午前 8:39
3
Hi,
could you look at /logs and see if you have any relevant error that could help us debug the failure please ?
「いいね!」 5
eviltrout
(Robin Ward)
2019 年 3 月 29 日午後 1:26
4
So the error popping up is almost certainly that the users have posts so they can’t be deleted. I think I realise the bug in my migration now, where I was creating reviewables for users who were not approved. I think perhaps banning someone is setting them as unapproved, so they showed up again.
I’ll take a look and see how I can improve it.
「いいね!」 3
Looks like we’re also missing a admin.flags.user_percentage.summary translation as a hover description on the percentage:
「いいね!」 6
Aye! Here you go… This is what I see by clicking on one of the “Reject” buttons.
This is the Info text related to the first warning
create_errors_json called with unrecognized type: #<Reviewable::PerformResult:0x00007fd1d233e4a0 @status=:failed, @reviewable=#<ReviewableUser id: 15, type: "ReviewableUser", status: 0, created_by_id: -1, reviewable_by_moderator: true, reviewable_by_group_id: nil, claimed_by_id: nil, category_id: nil, topic_id: nil, score: 1.0, potential_spam: false, target_id: 2685, target_type: "User", target_created_by_id: nil, payload: nil, version: 5, latest_score: nil, created_at: "2016-09-27 19:25:30", updated_at: "2016-09-27 19:25:30">, @transition_to=nil>
and this is from the second one…
Uncaught [object Object]
Url: https://www.forumastronautico.it/assets/ember_jquery-5dbd79abddf53926275c73f77dbe61e7351258de8d2e886bf2ce86f144368848.js
Line: 9
Column: 11652
Window Location: https://www.forumastronautico.it/review
If you need the backtrace let me know (lots of text)
「いいね!」 2
eviltrout
(Robin Ward)
2019 年 3 月 29 日午後 5:54
7
I believe this commit will fix the inability to reject users who have posts:
committed 05:53PM - 29 Mar 19 UTC
「いいね!」 9
eviltrout
(Robin Ward)
2019 年 3 月 29 日午後 6:16
8
This fixes the missing translations. Good catch @featheredtoast because it made me realise those components were admin only at the same time, which I also fixed:
committed 06:14PM - 29 Mar 19 UTC
「いいね!」 8
pfaffman
(Jay Pfaffman)
2019 年 3 月 29 日午後 8:39
9
UX Comment
I thought I’d seen this complaint elsewhere, but I can’t find it. I just did a g+ import and there are 1300 users in the approval queue with entries like this:
From this it’s impossible to tell why the user needs approval, and worse, the only way to find out seems to be to select the username and do a search. Is there a reason not to have the username link to their profile? Or, better, provide something about the user to know what to do about it?
And also, I presume that “Reject” rejects the user and does Something Bad. How does one clear this and say that the user is OK?
Help! How do I fix this?
My inclination is to just remove them all from the approval queue. But I don’t know how to do that because in the user record I see:
approved: true,
approved_by_id: -1,
approved_at: Fri, 29 Mar 2019 18:26:49 UTC +00:00,
So I guess this approval must be in some other table?
EDIT: This sounds a little like Needs Approval feature (Nothing to Approve) and SSO user unnecessary approval with 403 error .
「いいね!」 4
eviltrout
(Robin Ward)
2019 年 4 月 1 日午後 3:42
11
@pfaffman can you help me track this down? You said you did an import, but was it before you ran database migrations? Was must_approve_users set to true?
「いいね!」 2
I updated from the latest a few weeks ago to just now, site is not loading (the Oops message) and shows this in the logs a lot :
Failed to handle exception in exception app middleware : PG::UndefinedTable: ERROR: relation "queued_posts" does not exist
LINE 8: WHERE a.attrelid = '"queued_posts"'::regclass
^
: SELECT a.attname, format_type(a.atttypid, a.atttypmod),
pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,
c.collname, col_description(a.attrelid, a.attnum) AS comment
FROM pg_attribute a
LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum
LEFT JOIN pg_type t ON a.atttypid = t.oid
LEFT JOIN pg_collation c ON a.attcollation = c.oid AND a.attcollation <> t.typcollation
WHERE a.attrelid = '"queued_posts"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/rack-mini-profiler-1.0.2/lib/patches/db/pg.rb:110:in `async_exec'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/rack-mini-profiler-1.0.2/lib/patches/db/pg.rb:110:in `async_exec'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:63:in `block (2 levels) in query'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2.1/lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2.1/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2.1/lib/active_support/dependencies/interlock.rb:47:in `permit_concurrent_loads'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:62:in `block in query'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:579:in `block (2 levels) in log'
/usr/local/lib/ruby/2.5.0/monitor.rb:226:in `mon_synchronize'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:578:in `block in log'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2.1/lib/active_support/notifications/instrumenter.rb:23:in `instrument'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:569:in `log'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:61:in `query'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/connection_adapters/postgresql_adapter.rb:757:in `column_definitions'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/connection_adapters/abstract/schema_statements.rb:113:in `columns'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/connection_adapters/schema_cache.rb:69:in `columns'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/connection_adapters/schema_cache.rb:75:in `columns_hash'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/model_schema.rb:466:in `load_schema!'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/attributes.rb:234:in `load_schema!'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/attribute_decorators.rb:51:in `load_schema!'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/model_schema.rb:459:in `block in load_schema'
/usr/local/lib/ruby/2.5.0/monitor.rb:226:in `mon_synchronize'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/model_schema.rb:456:in `load_schema'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/model_schema.rb:346:in `attribute_types'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/model_schema.rb:370:in `type_for_attribute'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/table_metadata.rb:33:in `type'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/relation/predicate_builder.rb:51:in `build'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/relation/predicate_builder.rb:107:in `block in expand_from_hash'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/relation/predicate_builder.rb:71:in `each'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/relation/predicate_builder.rb:71:in `flat_map'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/relation/predicate_builder.rb:71:in `expand_from_hash'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/relation/predicate_builder.rb:21:in `build_from_hash'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/relation/where_clause_factory.rb:19:in `build'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/relation/query_methods.rb:591:in `where!'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/relation/query_methods.rb:584:in `where'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/querying.rb:12:in `where'
/var/www/discourse/app/models/queued_post.rb:39:in `new_posts'
/var/www/discourse/app/models/queued_post.rb:43:in `new_count'
/var/www/discourse/app/serializers/current_user_serializer.rb:192:in `post_queue_new_count'
(eval):34:in `_fast_attributes'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/active_model_serializers-0.8.4/lib/active_model/serializer.rb:456:in `attributes'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/active_model_serializers-0.8.4/lib/active_model/serializer.rb:480:in `_serializable_hash'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/active_model_serializers-0.8.4/lib/active_model/serializer.rb:359:in `serializable_hash'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/active_model_serializers-0.8.4/lib/active_model/serializer.rb:347:in `as_json'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2.1/lib/active_support/json/encoding.rb:35:in `encode'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2.1/lib/active_support/json/encoding.rb:22:in `encode'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2.1/lib/active_support/core_ext/object/json.rb:41:in `to_json'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/active_model_serializers-0.8.4/lib/active_model/serializer.rb:331:in `to_json'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/multi_json-1.13.1/lib/multi_json/adapters/oj.rb:40:in `dump'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/multi_json-1.13.1/lib/multi_json/adapters/oj.rb:40:in `dump'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/multi_json-1.13.1/lib/multi_json/adapter.rb:25:in `dump'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/multi_json-1.13.1/lib/multi_json.rb:139:in `dump'
/var/www/discourse/app/controllers/application_controller.rb:539:in `preload_current_user_data'
/var/www/discourse/app/controllers/application_controller.rb:354:in `preload_json'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2.1/lib/active_support/callbacks.rb:426:in `block in make_lambda'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2.1/lib/active_support/callbacks.rb:198:in `block (2 levels) in halting'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/abstract_controller/callbacks.rb:34:in `block (2 levels) in <module:Callbacks>'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2.1/lib/active_support/callbacks.rb:199:in `block in halting'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2.1/lib/active_support/callbacks.rb:513:in `block in invoke_before'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2.1/lib/active_support/callbacks.rb:513:in `each'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2.1/lib/active_support/callbacks.rb:513:in `invoke_before'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2.1/lib/active_support/callbacks.rb:131:in `run_callbacks'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/abstract_controller/callbacks.rb:41:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_controller/metal/rescue.rb:22:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2.1/lib/active_support/notifications.rb:168:in `block in instrument'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2.1/lib/active_support/notifications/instrumenter.rb:23:in `instrument'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2.1/lib/active_support/notifications.rb:168:in `instrument'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_controller/metal/instrumentation.rb:32:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_controller/metal/params_wrapper.rb:256:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/railties/controller_runtime.rb:24:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/abstract_controller/base.rb:134:in `process'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionview-5.2.2.1/lib/action_view/rendering.rb:32:in `process'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/rack-mini-profiler-1.0.2/lib/mini_profiler/profiling_methods.rb:78:in `block in profile_method'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_controller/metal.rb:191:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_controller/metal.rb:252:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_dispatch/routing/route_set.rb:52:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_dispatch/routing/route_set.rb:34:in `serve'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_dispatch/routing/mapper.rb:18:in `block in <class:Constraints>'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_dispatch/routing/mapper.rb:48:in `serve'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_dispatch/journey/router.rb:52:in `block in serve'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_dispatch/journey/router.rb:35:in `each'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_dispatch/journey/router.rb:35:in `serve'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_dispatch/routing/route_set.rb:840:in `call'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/rack-protection-2.0.5/lib/rack/protection/frame_options.rb:31:in `call'
/var/www/discourse/lib/middleware/omniauth_bypass_middleware.rb:32:in `call'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/rack-2.0.6/lib/rack/tempfile_reaper.rb:15:in `call'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/rack-2.0.6/lib/rack/conditional_get.rb:25:in `call'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/rack-2.0.6/lib/rack/head.rb:12:in `call'
/var/www/discourse/lib/content_security_policy/middleware.rb:12:in `call'
/var/www/discourse/lib/middleware/anonymous_cache.rb:216:in `call'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/rack-2.0.6/lib/rack/session/abstract/id.rb:232:in `context'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/rack-2.0.6/lib/rack/session/abstract/id.rb:226:in `call'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_dispatch/middleware/cookies.rb:670:in `call'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2.1/lib/active_support/callbacks.rb:98:in `run_callbacks'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_dispatch/middleware/callbacks.rb:26:in `call'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_dispatch/middleware/debug_exceptions.rb:61:in `call'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/logster-2.1.2/lib/logster/middleware/reporter.rb:30:in `call'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/railties-5.2.2.1/lib/rails/rack/logger.rb:38:in `call_app'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/railties-5.2.2.1/lib/rails/rack/logger.rb:28:in `call'
/var/www/discourse/config/initializers/100-quiet_logger.rb:16:in `call'
/var/www/discourse/config/initializers/100-silence_logger.rb:29:in `call'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_dispatch/middleware/request_id.rb:27:in `call'
/var/www/discourse/lib/middleware/enforce_hostname.rb:17:in `call'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/rack-2.0.6/lib/rack/method_override.rb:22:in `call'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_dispatch/middleware/executor.rb:14:in `call'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/rack-2.0.6/lib/rack/sendfile.rb:111:in `call'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/rack-mini-profiler-1.0.2/lib/mini_profiler/profiler.rb:171:in `call'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/message_bus-2.2.0/lib/message_bus/rack/middleware.rb:57:in `call'
/var/www/discourse/lib/middleware/request_tracker.rb:163:in `call'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/railties-5.2.2.1/lib/rails/engine.rb:524:in `call'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/railties-5.2.2.1/lib/rails/railtie.rb:190:in `public_send'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/railties-5.2.2.1/lib/rails/railtie.rb:190:in `method_missing'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/rack-2.0.6/lib/rack/urlmap.rb:68:in `block in call'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/rack-2.0.6/lib/rack/urlmap.rb:53:in `each'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/rack-2.0.6/lib/rack/urlmap.rb:53:in `call'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/unicorn-5.4.1/lib/unicorn/http_server.rb:606:in `process_client'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/unicorn-5.4.1/lib/unicorn/http_server.rb:701:in `worker_loop'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/unicorn-5.4.1/lib/unicorn/http_server.rb:549:in `spawn_missing_workers'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/unicorn-5.4.1/lib/unicorn/http_server.rb:142:in `start'
/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/unicorn-5.4.1/bin/unicorn:126:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.5.0/bin/unicorn:23:in `load'
/var/www/discourse/vendor/bundle/ruby/2.5.0/bin/unicorn:23:in `<main>'
eviltrout
(Robin Ward)
2019 年 4 月 1 日午後 4:04
13
Was there an error with the upgrade? The file app/models/queued_post.rb does not exist anymore and that error message indicates it’s still being used.
「いいね!」 2
Nothing reported, everything seemed successful. I’m doing a full rebuild from the console right now to see if that fixes it.
eviltrout
(Robin Ward)
2019 年 4 月 1 日午後 4:09
15
It already should handle the PerformResult because it has an errors property. In fact there’s a test for this:
「いいね!」 3
A full rebuild fixed it, that was fun. ^.^;
「いいね!」 2
Some constructive feedback
There are some gamebreaking problems with this as it stands now, ill run through them here.
When i click on a flagged comment, it does not jump directly to the comment in question in the thread. I have to use the search feature to locate the comment that got flagged. This is very stressful on mobile, and tedious overall.
When a post gets deleted by the system, i lose the ability to go to the thread in question. I prefer to read the thread as it is, and not through the flag menu.
This also made things even more complicated when i as unable to mark it as “Not Spam”, and got prompted with this error:
The way we solved this was to ignore the flag, then locate the deleted thread and un-delete it manually. I dont know if this manual workflow was possible from the beginning, but having the ability to go to the thread in question would certainly be helpful regardless.
I dont know if this is intentional or not, but when a flag is “ignored”, i thought that was only supposed to affect that one person, leaving the flag to be death with by someone else. Please correct me if im wrong. Currently, if someone ignores a flag, it gets ignored for everyone. If this is intentional, then look past this point, however, if its ment to only ignore for you, then thats not working properly.
That being said, i love this update as a whole. Just a few minor things to patch up!
「いいね!」 7
eviltrout
(Robin Ward)
2019 年 4 月 1 日午後 4:29
18
Thanks for the feedback. For the Internal Server Error, could you check /logs and tell us what the actual error was?
「いいね!」 1
Am i able to do that as a regular moderator? If so, where do i enter the /logs command. Pardon, im relatively new, started at the end of last year.
edit: Im in the logs now, but i dont know what to look for.
eviltrout
(Robin Ward)
2019 年 4 月 1 日午後 4:33
20
It’s a bit tricky to explain, but you’ll want the error that happened right when you clicked “Not Spam”. You might be able to find it by timestamp. When you’re viewing it, you should see the path similar to /review/(some number)/perform/not_spam.json with an error message.
「いいね!」 2
Alright i have to go, but i’ll try to recreate the scenario once i get home with a new account. If i cant figure it out then i’ll see if Bart can look into it.
「いいね!」 5