数千件の招待状を一括作成

おそらく答えは「APIに何千ものリクエストを送信する」でしょうが、もっとスマートな方法があることを期待していました。

シナリオ:大規模な協同組合のためにコミュニティサイトを構築しました。メンバーは15,000人以上おり、おそらくその95%はユーザーアカウントを開くことはなく、さらに4%はユーザーアカウントを作成しても決して使用しません。15,000件の招待状すべてに単一のリンクを作成すると、サイトが悪用される可能性があるため、私がやりたいのは、それぞれ1回の招待のみを持つ約16,000件の招待リンクを作成し、メールテンプレートツールがそれらを縫い合わせるようにすることです。唯一の注意点は、招待リンクの作成です。プライバシーのためにシステムを分離したいので、15,000件以上のメールアドレスをDiscourseに渡すことはしません。そのため、Discourseサーバーはメールの完全なリストを持つのではなく、匿名化された招待リンクのリストのみを持つことになります。

Discourseにアドレスを保存することが、他の場所に保存するよりも危険だと考えるなら、それらを作成する必要があります。APIが気に入らない場合は、Railsから行うことができます。

i=Invite.generate(user, skip_email: true, max_redemptions_allowed: 1)

これにより、招待キーが生成されます。

"/invites/#{i.invite_key}"

がURLです。それらすべてをファイルに書き込むようなことをすることができます。

「いいね!」 4

そう思いました、まだループで繰り返す必要があります :slight_smile:
わかりました、ありがとう!

「いいね!」 1

はい、私は本当にナイーブでした。curlコマンドを作成し、それを16,000回実行するだけで済むと思っていましたが、1分後には自分のディスコースによってレート制限を受けました :slight_smile: :man_facepalming:

それで、Railsの初心者として、ディスコースコンテナでシェルを開き、irbに入って実際に行うべきことは何ですか?

一括招待をお試しになりましたか?

それが自然な私の定番だったでしょうが、事前にメールアドレスのリストを持っていないのです。これは信用組合のサイトなので、経営陣はプライバシーの大惨事を起こすリスク(そして私自身もそのリスクを負いたくない)を冒して、15,500件のメールアドレスのリストを私に渡すことはできません。そのため、1回の引き換えにつき1つのリンクを16,000個作成する必要があり、彼らがそれをメールキャノンに組み込むことになります。後で改善されることを願っています。

「いいね!」 1

SSO認証も利用できないと推測します。

その場合、@pfaffman が提案した方法が最善です。

以下のようなコードで実現できます。

user = User.find_by(username: 'system')
16000.times do
  i = Invite.generate(user, skip_email: true, max_redemptions_allowed: 1)
  puts "/invites/#{i.invite_key}"
  # "/invites/#{i.invite_key}" をファイルに書き込む
end

まずはループを1回か2回実行して、意図した通りに動作するか確認してください。

怠惰ですが、問題ない方法としては、すべて出力(puts)してターミナルセッションをログに記録することです :smiley:

「いいね!」 3

フォーラムで誰かにRoRを教えてもらうのは面倒なので、やめておきます。API呼び出しの間に1秒の遅延を追加すればスピード違反にならないことがわかったので、最初の実行は遅い実行になります。

APIキーは「system」ユーザー用に作成されたため、すべての招待状が私のユーザー管理画面に表示されません。「system」としてログインしなくても、サーバー上の全招待状の状態を確認するクエストに出かけます。それが可能であればですが。

とりあえず、ありがとうございました。次回はもっと知的で賢い質問ができることを願っています :slight_smile:

「いいね!」 1

「開発者」(フォーラム構築時にデフォルト管理者として提供されるメールアドレス)としてマークされていれば、「システム」としてログインするのは非常に簡単です。@system のユーザーページを開き、「管理者」を選択し、一番下までスクロールして、「なりすまし」をクリックするだけです。

「いいね!」 1

ああ、そうか…今までそんなに下までスクロールしたことがなかったよ :slight_smile: すごくいいね。何年も他のサイトでDiscourseをユーザーとして使ってきたけど、管理者としては基本的なニュアンスをいくつか見落としていたよ…

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.