Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 当盆景服务器关闭时,我应该怎么做?_Ruby On Rails_Ruby_Heroku_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Tire - Fatal编程技术网 elasticsearch,tire,Ruby On Rails,Ruby,Heroku,elasticsearch,Tire" /> elasticsearch,tire,Ruby On Rails,Ruby,Heroku,elasticsearch,Tire" />

Ruby on rails 当盆景服务器关闭时,我应该怎么做?

Ruby on rails 当盆景服务器关闭时,我应该怎么做?,ruby-on-rails,ruby,heroku,elasticsearch,tire,Ruby On Rails,Ruby,Heroku,elasticsearch,Tire,我将ElasticSearch与Tire一起使用,并将我的应用程序托管在Heroku上 昨晚,当盆景服务器关闭时,我的整个应用程序崩溃了。 当我尝试将应用程序部署到Heroku时,Tire尝试连接并创建索引,并抛出错误,因此我必须将我的Tire代码从所有型号移动到,除非语句: unless ENV['ES_DISABLED'] # Elastic Search # include Tire::Model::Search include Tire::Model::Callback

我将ElasticSearch与Tire一起使用,并将我的应用程序托管在Heroku上

昨晚,当盆景服务器关闭时,我的整个应用程序崩溃了。 当我尝试将应用程序部署到Heroku时,Tire尝试连接并创建索引,并抛出错误,因此我必须将我的
Tire
代码从所有型号移动到
,除非
语句:

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


我想为将来类似的错误做好准备。有没有更好的方法来避免它们呢?

这里是Nick with Bonsai.io。对于影响您的应用程序的中断,我深表歉意。你可以在我们的博客上找到我的

除非我弄错了,否则我相信在Rails评估和加载模型类时,Tire会在运行
Tire.mapping
方法调用时尝试创建索引

这类场景似乎在
ECONNREFUSED
问题中得到了部分解决,但这不包括从更大集群断开连接的节点发出的503错误响应,就像我们的集群所经历的那样

在测试索引是否存在或试图创建索引和映射时,这可能会对轮胎发出一个良好的拉动请求,以类似地挽救一个50倍的错误


或者,您也可以将
tire.mapping
调用打包到您的
begin/rescue

嗯,这很奇怪。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'
$ps aux| grep java
121:karmi 7197 0.0 0.0 2432768 472 s003 R+7:37 pm 0:00.00 grep java
$bundle exec rails控制台
加载开发环境(Rails 3.2.11)
文章
正在跳过索引创建,无法连接到Elasticsearch
(最初的例外是:#)
=>文章(id:integer,title:string,content:text,author:string,发布日期,创建日期,更新日期)
Article.search'*'
错误号::ECONREFUSSED:连接被拒绝-连接(2)
from/Users/karmi/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/net/http.rb:762:in'initialize'
...
from/Users/karmi/playdry/ElasticSearch/Tire/Tire/lib/Tire/search.rb:35:in'results'

不应将您的
映射
etc定义包装在begin/rescue中——相反,您应该在应用程序代码中有一个
rescue\u from
或其他方式,通知用户搜索功能不起作用。

我不认为在部署代码或启动应用程序时默认创建索引。你确定这不是你实现的东西吗?它发生在部署到heroku的过程中。所以,也许heroku会触发重新生成索引。@phoet Tire确实会这样做,但它会尝试处理连接问题。我看不到您链接到的问题与此错误之间的联系?在任何一种情况下,应用程序代码都应该有一种用户友好的方式来处理“Elasticsearch已关闭”的情况。编辑:因此,这里的建议是避免任何与网络相关的错误?我们似乎无法使用rescue\u from,因为Tire捕捉到错误号::ECONREFUNCE并返回
false
。我错了吗?就索引创建而言,我似乎是正确的,但我可以在其他地方拯救Errno::econnreference。我认为问题更多的是50倍的错误,而不是econnreference。例如,请求被定向到一个无法加入集群其余部分的节点。Nick是对的,当前代码只处理ECONNREFUSED,而不是Elasticsearch返回的HTTP错误。它值得修复;看见