1

私は Tire で ElasticSearch を使用しており、Heroku でアプリをホストしています。

昨夜、bonsai サーバーがダウンしたとき、私のアプリ全体がクラッシュしました。アプリを 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

もちろん、ES_DISABLED定数trueは Heroku に設定しています。

今後同様のエラーに備えたいと思います。それらを回避するより良い方法はありますか?

4

2 に答える 2

2

うーん、これは奇妙です。Tire は実際に、モデルのインデックスが存在しない場合にそれを作成しようとしますが、アプリケーションをダウンさせることはありません。

私はこれを行うことができることに注意してください:

$ ps aux | grep java
121:karmi           7197   0.0  0.0  2432768    472 s003  R+    7:37PM   0:00.00 grep java

$ bundle exec rails console
Loading development environment (Rails 3.2.11)
Article
Skipping index creation, cannot connect to Elasticsearch
(The original exception was: #<Errno::ECONNREFUSED: Connection refused - connect(2)>)
=> Article(id: integer, title: string, content: text, author: string, published_on: date, created_at: datetime, updated_at: datetime)
Article.search '*'
Errno::ECONNREFUSED: Connection refused - connect(2)
    from /Users/karmi/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/net/http.rb:762:in `initialize'
  ...
    from /Users/karmi/Playground/ElasticSearch/Tire/tire/lib/tire/search.rb:35:in `results'

etc の定義を begin/rescue でラップしないでください。代わりに、検索機能が動作していないことをユーザーに通知する、またはその他の手段をアプリケーション コード内に用意する必要があります。mappingrescue_from

于 2013-03-06T18:44:17.993 に答える
1

Bonsai.io のニックはこちら。アプリに影響を与えた機能停止について、心よりお詫び申し上げます。私たちのブログで私の完全な事後分析を見つけることができます.

私が間違っていない限り、tire.mappingRails がモデル クラスを評価してロードしている間にメソッド呼び出しを実行すると、Tire はインデックスを作成しようとするはずです。

この種のシナリオは、Issue #180コミット (0df58dce)で部分的に対処されECONNREFUSEDているようですが、それは、クラスターが経験したように、より大きなクラスターから切断されたノードからの 503 エラー応答をカバーしません。

おそらくこれは、インデックスの存在をテストするとき、またはインデックスとマッピングを作成しようとするときに、Tire が 50x エラーを同様にレスキューするための適切なプル リクエストになるでしょうか?

tire.mappingまたは、通話を自分の側でラップすることもできbegin/rescueます。

于 2013-03-06T06:23:55.097 に答える