我正在将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 #180commit (0df58dce)中针对ECONNREFUSED问题得到了部分解决,但是这并不能涵盖与较大集群断开连接的节点的503错误响应,就像我们的集群所经历的那样。

也许这会提出很好的请求,让Tire在测试索引存在性或尝试创建索引和映射时以类似的方式挽救50x错误?

或者,您也可以在一端将tire.mapping调用包装在begin/rescue中。

关于ruby-on-rails - 盆景服务器关闭时该怎么办?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15228293/

10-10 10:49