seefood
(Ira Abramov)
2024 年4 月 24 日 14:32
1
我想答案是“向 API 发送数千个请求”,但我希望有更聪明的方法。
场景:我们为一家大型合作社(Co-Op)建立了一个社区网站。有 15,000 多名成员,其中 95% 的人可能永远不会创建用户,另外 4% 的人会创建用户但从不使用。为 15,000 次邀请创建单个链接会使网站容易被滥用,因此我想创建大约 16,000 个邀请链接,每个链接只有一个邀请,邮件模板工具将负责将它们缝合起来。唯一的难点是邀请链接的创建。我想将系统分开以保护隐私,因此我不会将 15,000 多个地址提供给 Discourse,这样 Discourse 服务器就不会携带完整的电子邮件列表,而只会携带匿名邀请链接列表。
pfaffman
(Jay Pfaffman)
2024 年4 月 24 日 15:25
2
如果您认为在 Discourse 中存储地址比在其他任何地方存储地址更危险,这是一种隐私问题,那么您需要自己创建它们。如果您不喜欢 API,也可以通过 Rails 来实现:
i=Invite.generate(user, skip_email: true, max_redemptions_allowed: 1)
这将为您生成一个邀请密钥。
"/invites/#{i.invite_key}"
是相应的 URL。您可以将它们全部写入一个文件。
4 个赞
seefood
(Ira Abramov)
2024 年4 月 24 日 16:03
4
好的,我真是太天真了。我写了 curl 命令,以为可以运行 16k 次,但一分钟后就被我自己的 discourse 限制了速率了
作为一个 Rails 新手,我需要进入 discourse 容器的 shell,然后进入 irb,具体该怎么做?
seefood
(Ira Abramov)
2024 年4 月 24 日 16:44
6
本来我会这样做,但我没有提前收到电子邮件列表。这是一个信用合作社的网站,所以管理层不能仅仅给我一份包含 15,500 封电子邮件的列表,以免带来隐私灾难(我也不想自己承担风险)。所以我必须创建 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)并记录你的终端会话
3 个赞
seefood
(Ira Abramov)
2024 年4 月 24 日 17:02
8
你知道的,我不想去打扰任何人,让他们在一个论坛上教我 RoR。我看到在 API 调用之间添加 1 秒的延迟就不会收到超速罚单,所以这次运行将只是一个慢速运行。
API 密钥是为“system”用户创建的,因此所有邀请都未显示在我的用户管理屏幕上。我现在将踏上征程,查看服务器上总邀请的状态,而无需登录为“system”,如果这可能的话。
感谢您目前的帮助,希望下次我能提出更聪明、更巧妙的问题
1 个赞
Firepup650
(Firepup Sixfifty)
2024 年4 月 24 日 18:43
9
登录为 system 相当容易,如果您被标记为论坛的“开发者”(在构建论坛时提供的电子邮件,作为默认管理员)。您可以打开 @system 的用户页面,选择Admin ,一直向下滚动,然后点击Impersonate 。
1 个赞
seefood
(Ira Abramov)
2024 年4 月 24 日 20:37
10
哦,对了……我只是从来没滚动到那么低 非常酷。我作为用户在不同的网站上使用 Discourse 已经很多年了,只是作为其中一个站点的管理员,我错过了一些基本的细微差别……
system
(system)
关闭
2024 年5 月 24 日 20:38
11
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.