adamengst
(Adam C. Engst)
1
我正在考虑将邮件列表中的约 600 个电子邮件地址导入到 Discourse 中,目标是让所有用户自动设置为关注“公告”分类,该分类将主要用来替代邮件列表的核心功能。
据我了解,在导入过程中(我理解这涉及脚本,需要我的开发人员来执行),我们可以强制所有被导入的用户关注“公告”分类,这样他们就会收到每篇帖子的邮件通知(除非他们手动取消关注)。是这样吗?
对我来说不太清楚的是,被导入用户的用户体验会如何。他们每个人都会拥有一个账户,但我推测在他们设置密码之前无法登录,而首次访问网站时,Discourse 会提示他们设置密码。对吗?
如果他们从未设置密码怎么办?(大多数人尚未意识到他们现在拥有 Mailman 账户;因此对于需要再创建一个账户存在抵触情绪。唉。)如果某人从未访问过网站也从未登录,他们是否仍然会收到“公告”分类中主题和帖子的邮件通知?
对于有过类似导入经验的人,导入后你们遇到了哪些类型的支持问题?
谢谢!
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 网站上为其创建了账户,并提供一个链接供他们设置账户:
您的 Discourse 站点名称已为您创建了新账户
点击以下链接为您的新账户设置密码:
https://discourse.example.org/u/password-reset/(随机数字)
您需要设置您的公告分类,使所有新用户自动关注该分类,这是一个站点设置。
adamengst
(Adam C. Engst)
3
谢谢!这看起来相对简单(是的,这些都是我管理的列表中的用户,我正在尝试将他们从 Mailman 迁移出去)。
您是否知道,如果他们从未设置账户,在接收“自动关注公告”类别的邮件方面会发生什么情况?
downey
(Michael Downey)
4
关于这个话题,这里比我更聪明的人大有人在。但我想,因为你运行了 u.activate(); 命令,他们应该已经完全激活了。通过邮件,他们唯一要做的就是将密码从初始的随机字符串(没人知道)改为自己的密码。
有一种说法是,不活跃的用户最终会停止接收邮件,但我不确定这是否适用于“自动关注”的类别。我主要是从摘要/汇总接收者的角度考虑过这个问题。希望有人能对此补充说明。
adamengst
(Adam C. Engst)
5
还有一个关于导入的快速问题。如果您尝试导入一个已分配给系统中用户的电子邮件地址,会发生什么情况?它会被直接跳过吗?
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
谢谢!我不得不在第三行前加上 sudo su 以获取连接 Docker 守护进程的权限,之后一切顺利,我成功执行了上述 Rails 脚本中的命令并创建了一个测试用户。太棒了!
不过,这个脚本如何扩展以处理 600 个电子邮件地址的列表呢?重复运行 600 次似乎……有点繁琐。
pfaffman
(Jay Pfaffman)
10
您可以生成一个脚本,其中包含针对 600 名用户的该行代码,或者将数据放入某个数据结构中并遍历它。
adamengst
(Adam C. Engst)
11
由于这里没有人有 Ruby 经验,我们选择创建一个包含所有命令的大文件,然后将其粘贴到 Rails 控制台中。看起来运行正常,但 Sidekiq 中现在有四个错误(在前 50 次测试导入中),我不知道该如何处理它们或它们代表什么。用户是否已创建?还是他们只是没有收到欢迎邮件?由于重试失败,我是否应该直接删除这些错误并继续?
pfaffman
(Jay Pfaffman)
12
这应该是你需要去弄清楚的事情。
我很难想象 user_id 怎么会无效。
大概是这样,但你需要找出哪些用户失败了以及原因。你在粘贴命令时是否出现了错误?如果你无法查明这一点,就需要查看已存在的用户和你预期应存在的用户,并找出其中的差异。
如果你没有简便的方法来回查看之前的内容,那么应该分更小的批次进行操作,以便更轻松地检查它们的进度。
adamengst
(Adam C. Engst)
13
我直到很久之后才收到相关通知,因此无法追溯。这些错误有可能是因为导入的电子邮件地址在系统中已存在——我可以测试一下。我预期创建的所有用户都已成功创建。
但我无法确定的是,这张截图中的信息与我在 Discourse 中能查询到的任何内容是否存在关联。email_tokens 是否能关联到其他任何信息?
看来我只能继续分批操作,看看能否将某个错误与这些消息中的某一条对应起来。
adamengst
(Adam C. Engst)
14
原来这些错误是在导入过程中每次出错时生成的,例如用户名超过 20 个字符、用户名中连续出现两个特殊字符,或者邮箱可能已被使用(我在这一项上看到了不一致的结果)。我只是逐个修复了这些问题,然后继续处理,最后删除了 Sidekiq 中的所有错误记录。