我正在尝试自动创建大量主题+帖子。但是,我一直受到速率限制的困扰。
我首先尝试使用 API。我的脚本很快就遇到了 429 错误。我尝试调整速率限制(如管理员所示,请参见屏幕截图),但我不清楚正确的方法是什么,或者这是否是徒劳的。
然后,我尝试使用 rails r <script> 从容器内部使用 Ruby 脚本。但是,在这里我仍然看到 An error occurred RateLimiter::LimitExceeded。这让我感到惊讶,为什么 Ruby 方法会受到速率限制?
无论如何,有没有办法避免这种情况?批量导入数据的正确方法是什么?我曾考虑直接使用 SQL,但更希望使用更高级别的 API,这样我就不必担心在创建项目时数据库中缺少字段。
提前感谢。
pfaffman
(Jay Pfaffman)
2
看起来像什么?
你应该使用 rails 来导入数据,而不是 API。
你可以看看导入脚本,但你可能需要更简单的东西。
def add_all()
limit = 2000
translations = Dir["/shared/translations/vagrant-data/translations/*.txt"]
ps = Dir["/shared/translations/vagrant-data/paragraphs/*.txt"]
# RateLimiter.new.disable_rate_limits!
translations.each_with_index do |t,i|
p = ps[i]
tr_text = File.read(t)
p_text = File.read(p)
description = "#{p_text}\n\nTranslated as:\n\n#{tr_text}"
title = " the booki (paragraph ##{i+1})"
if (i < limit)
begin
puts "Adding topic #{tr_text}"
topic = Topic.create!( title: title, category_id: 5, user_id: 3 )
Post.create!( topic_id: topic.id, raw: description, user_id: 3, skip_validation: true )
rescue Exception => e
puts "An error occurred #{e}"
end
end
end
end
add_all()
pfaffman
(Jay Pfaffman)
4
这会产生一个速率限制错误吗?我认为这应该可以正常工作。
是的,请看我之前的帖子。它会进入带有该错误的 rescue 块。
1 个赞
我不知道我的服务器是不是处于一种奇怪的状态。我在截图中摆弄了速率限制,将它们设置为零,也许是 -1。现在我到处都会收到这些速率限制错误。不过奇怪的是,有些请求还是成功了,所以在我想要创建的 1500 条记录中,有三四条成功进入了数据库。也许我会清除数据库并刷新,看看是否能解决这个问题。不确定如何检查数据库状态并捕获 bug(如果存在的话)。
1 个赞
#### 已安装
### 3.1.0.beta5
( [ 5584fb1e3b ](https://github.com/discourse/discourse/commits/5584fb1e3b7a29d7ee5d7e43520191081dd10a16) )
我刚完成了常规的 Docker 安装。没什么特别的。
在导入期间是否可以暂时禁用速率限制,之后再恢复?目前只有我一个人会使用 API(我不希望我的用户使用 API)。因此,如果可能的话,我甚至可以永久禁用速率限制。
pfaffman
(Jay Pfaffman)
10
我从未见过 Rails 中的速率限制。我一无所知。
1 个赞
@pfaffman 我敢打赌,我通过更改速率限制搞砸了什么,现在系统处于一种奇怪的状态,这些错误并不是真正的问题,而是其他问题。我将重新创建服务器,看看我的脚本这次是否有效,然后汇报。
2 个赞
抱歉,重建服务器也未能解决问题。 
我删除了 shared 目录下的 postgres_data 目录,然后运行了 ./launcher rebuild app 并获得了一个新的应用程序实例。
我的脚本现在创建了用户和用户所属的类别,然后尝试在该类别中创建主题。但是,它立即遇到了速率限制错误:An error occurred RateLimiter::LimitExceeded
我真的很困惑,因为听起来 rails r 脚本不应该受到速率限制问题的影响,对吧?我确实在模型中看到了表明速率限制代码正在执行的代码,但我不知道如何禁用它,也不知道如何验证这只会在通过 API 发出请求时发生。
还有其他建议吗?我认为现在直接通过 psql 进入是我的最佳选择,这令人失望,因为 rails r 脚本更简洁、更易于使用。
我搞定了!
测试的力量在此得到了证明。我去了这个文件:
其中显示了 RateLimiter.enable 这个方法。我想,为什么不试试 RateLimiter.disable 呢。
不再有速率限制错误了!
4 个赞
system
(system)
关闭
15
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.