我正在将TireSearch与ElasticSearch结合使用,并将我的应用托管在Heroku上。
昨晚,当盆景服务器关闭时,我的整个应用程序崩溃了。
当我尝试将应用程序部署到Heroku时,Tire尝试连接并创建索引,并抛出错误,因此我不得不将Tire
代码从所有模型移至unless
语句:
unless ENV['ES_DISABLED']
# Elastic Search
#
include Tire::Model::Search
include Tire::Model::Callbacks
index_name INDEX_NAME
tire.mapping do
indexes :id, :type => 'string', :index => :not_analyzed
indexes :content, analyzer: 'snowball', boost: 100
end
end
当然,我在Heroku上将
ES_DISABLED
常量设置为true
。我希望将来为类似的错误做好准备。有更好的方法避免它们吗?
最佳答案
尼克和Bonsai.io在这里。对于影响您的应用的服务中断,我深表歉意。您可以在我们的博客上找到我的full post-mortem。
除非我没有记错,否则我相信Tires将在Rails评估和加载模型类时运行tire.mapping
方法调用时尝试创建索引。
看来这种情况已在Issue #180和commit (0df58dce)中针对ECONNREFUSED
问题得到了部分解决,但是这并不能涵盖与较大集群断开连接的节点的503错误响应,就像我们的集群所经历的那样。
也许这会提出很好的请求,让Tire在测试索引存在性或尝试创建索引和映射时以类似的方式挽救50x错误?
或者,您也可以在一端将tire.mapping
调用包装在begin/rescue
中。
关于ruby-on-rails - 盆景服务器关闭时该怎么办?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15228293/