adamengst
(Adam C. Engst)
1
メーリングリストから約600件のメールアドレスをDiscourseにインポートしようと考えています。その目的は、すべてのユーザーが自動的に「Announcements」カテゴリをウォッチするように設定し、メーリングリストの主要な機能を複製することです。
インポートプロセスの一環として(スクリプトを使用し、開発者に対応してもらう必要がありますが)、インポートされたすべてのユーザーに対して「Announcements」カテゴリを強制的にウォッチさせることができる、つまり、手動でウォッチを解除しない限りすべての投稿のメールを確実に受け取れる、と理解していますが、これは正しいでしょうか?
あまり明確ではないのは、インポートされたユーザーのユーザーエクスペリエンスです。それぞれアカウントは作成されますが、パスワードを設定するまでログインできないと思われます。また、初めてサイトを訪問した際に、Discourseからパスワード設定を促されるはずです。合っていますか?
もし誰かがパスワードを一度も設定しなかったらどうなるでしょうか?(多くのユーザーが現在Mailmanのアカウントを持っていることに気づいておらず、「さらに別のアカウントが必要」という反発がありました。ため息。)誰かがサイトを一度も訪れず、ログインもしない場合でも、「Announcements」カテゴリのトピックや投稿に関するメールは受け取れるのでしょうか?
この作業を行った経験のある方、インポート後にどのようなサポート対応が必要でしたか?
よろしくお願いいたします。
downey
(Michael Downey)
2
すでにこれらのユーザーとトランザクション関係にある場合、つまり新しいプラットフォームへ移行させる場合、ユーザー作成プロセスを短縮する方法があります。これは上級管理者向けですが、以下にコマンドライン(rails console)で使えるアイデアをいくつか紹介します:
u = User.new({username: 'testuser', email: 'testuser@example.com', name: 'Test User', trust_level: 2, password: SecureRandom.hex});
u.activate();
t = u.email_tokens.create(email: u.email);
Jobs.enqueue(:critical_user_email, type: :account_created, user_id: u.id, email_token: t.token);
私の経験では、これにより指定した詳細情報で新しいユーザーが作成され、アカウントが有効化されてメールを受信できるようになり、さらにDiscourseサイト上でアカウントが作成されたことを通知するメールが送信されます。そのメールにはアカウント設定用のリンクも含まれています:
Your Discourse Site Name で新しいアカウントが作成されました
以下のリンクをクリックして、新しいアカウントのパスワードを設定してください:
https://discourse.example.org/u/password-reset/(randomdigits)
すべての新規ユーザーが自動的に「Announcements」カテゴリをウォッチするように設定する必要があります。これはサイト設定で可能です。
adamengst
(Adam C. Engst)
3
ありがとうございます!それは比較的シンプルそうですね(はい、これらはすべて私が管理しているリストのユーザーで、Mailman から移行しようとしています)。
彼らがアカウントを設定しない場合、自動で「お知らせ」カテゴリをウォッチすることになるメールの受信にはどのような影響があるかご存知ですか?
downey
(Michael Downey)
4
このトピックについては、私よりも詳しい人が他にもいると思いますが、u.activate(); コマンドを実行しているため、ユーザーはすでに完全にアクティブ化されていると考えています。メールを通じて行われているのは、誰も知らない初期のランダムな文字列からパスワードを変更するだけです。
非アクティブなユーザーは次第にメールが届かなくなるという考え方がありますが、それが「自動ウォッチ」カテゴリにも適用されるかどうかはわかりません。私は主にダイジェストやサマリーの受信者について考えていました。他の誰かがその点についてコメントしてくれることを願っています。
adamengst
(Adam C. Engst)
5
インポートに関するもう一つの簡単な質問です。システムに既に割り当てられているユーザーのメールアドレスをインポートしようとするとどうなるかご存知ですか?単にスキップされるのでしょうか?
downey
(Michael Downey)
6

使い捨てアドレスで実際に試してみるのが一番だと思います。
adamengst
(Adam C. Engst)
7
そう言われるかもしれないと心配していました。Rails コンソールでの対応は、私の管理スキルでは全く手におえないものでした(VPS には Rails がインストールされておらず、そもそもその方法で 600 件のアドレスをインポートする方法が見当もつきませんでした)。そのため、開発者に依頼せざるを得ません。確認を頼みます。
riking
(Kane York)
8
セルフホスト型の Discourse サイトで Rails コンソールにアクセスするには、以下のようにしてください:
ssh ....
cd /var/discourse
./launcher enter app
rails c
adamengst
(Adam C. Engst)
9
ありがとうございます!Docker デーモンへの接続権限を得るために、3 行目の前に sudo su を追加する必要がありましたが、その後うまく動作し、上記の Rails スクリプトの行を実行してテストユーザーを作成することができました。やったー!
ただ、このスクリプトを 600 件のメールアドレスのリストに対応させるにはどうすればよいでしょうか?600 回も実行するのは……面倒ですよね。
pfaffman
(Jay Pfaffman)
10
600人のユーザーに対してその行を含むスクリプトを生成するか、データを何らかのデータ構造に格納してループ処理を行うスクリプトを生成することになります。
adamengst
(Adam C. Engst)
11
ここには Ruby の経験者が誰もいなかったため、すべてのコマンドを大きなファイルにまとめて Rails コンソールに貼り付ける方法を選びました。動作しているようですが、最初の 50 件のテストインポートのうち Sidekiq で 4 つのエラーが発生しています。これらのエラーの対処法や意味がわかりません。ユーザーは作成されましたか?それとも単にウェルカムメールが届かなかっただけでしょうか?再試行が失敗しているため、これらのエラーを削除して先に進んでよいのでしょうか?
pfaffman
(Jay Pfaffman)
12
それを確認するのはあなたにとって良いことです。
user_id が無効になるなんて、私には想像しにくいです。
おそらくそうです。ただし、どのユーザーが失敗し、なぜ失敗したのかを特定する必要があります。コマンドを貼り付けた際にエラーが発生しませんでしたか?それがわからない場合は、既存のユーザーと存在すると予想されるユーザーを比較し、その違いを確認する必要があります。
過去の履歴を簡単にスクロールして確認できない場合は、少量ずつ処理を進め、進捗をより簡単に確認できるようにしてください。
adamengst
(Adam C. Engst)
13
この件にはかなり後になってから気づいたので、遡って確認する方法がありませんでした。おそらく、インポートしたメールアドレスがすでにシステム内に存在する場合にこれらのエラーが発生しているのでしょう——それはテストしてみます。私が作成されると思っていたユーザーはすべて作成されました。
しかし、このスクリーンショットの情報と Discourse で調べられることの間に何らかの関連があるかどうかはわかりません。email_tokens は他の情報と結びつけることができるのでしょうか?
小さなバッチで続けて、これらのメッセージのいずれかにエラーを関連付けられるか試してみるしかなさそうです。
adamengst
(Adam C. Engst)
14
これらのエラーは、インポート中にエラーが発生するたびに生成されていたことが判明しました。具体的には、ユーザー名が20文字を超える場合、ユーザー名に2つの特殊文字が連続して含まれている場合、またはすでに使用されているメールアドレスが原因である可能性があります(この点については一貫しない結果も見られました)。私は各問題を修正して次に進み、最後にSidekiqからすべてのエラーを削除しました。