AWS上的Rails应用无法访问ElasticSearch服务,但Rails控制台可以

时间:2018-07-24 23:03:03

标签: ruby-on-rails amazon-web-services elasticsearch

我有一个在AWS上运行的Rails应用程序,并决定将Amazon ElasticSearch(AES)添加到该应用程序。如果转到控制台并创建索引并运行搜索,我就能使其正确运行。但是,如果我尝试从应用程序运行(通过转到浏览器并在浏览器上运行页面),则在控制台上进行的相同搜索将失败,并在日志中提供以下错误:

Started GET "/customers/search" for 168.0.184.214 at 2018-07-24 18:31:04 -0400
Processing by CustomersController#search as HTML
^[[1m^[[36mUser Load (1.8ms)^[[0m  ^[[1m^[[34mSELECT  "users".* FROM "users"   WHERE "users"."deleted_at" IS NULL AND "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2^[[0m  [["id", 30], ["LIMIT", 1]]
Completed 500 Internal Server Error in 40ms (ActiveRecord: 12.2ms)

Elasticsearch::Transport::Transport::Errors::NotFound ([404] <html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.12.0</center>
</body>
</html>
):

app/controllers/customers_controller.rb:8:in `map'
app/controllers/customers_controller.rb:8:in `search'

在控制器上导致该错误的代码是这样的:

 class CustomersController < ApplicationController
   def search
     @page = params[:page] || 1
     @per_page = params[:per_page] || 10
     s = Customer.custom_search({first_name:'Paul'}).results.map(&:first_name)

   end
 end

现在,如果我从控制台运行该搜索,则一切正常。

该应用程序位于nginx + Puma服务器后面。

我的配置文件config / initializers / elasticsearch.rb看起来像这样

 config = {
   host: "https://vpc-t2-es-i5qqpdv4k4pvq3smnj3nc46f74.us-east-1.es.amazonaws.com/",
   transport_options: {
     request: { timeout: 10000 }
   }
 }

 Elasticsearch::Model.client = Elasticsearch::Client.new(config)

nginx的配置文件为:https://jpst.it/1jZl4

有人对可能出什么问题有任何建议吗?

1 个答案:

答案 0 :(得分:0)

好吧,这个问题比我想象的要容易得多。

问题在于Nginx正在与Puma一起使用,并且重新启动Nginx不会重新启动Puma进程,因此我尝试的任何更改都未应用于正在运行的应用程序。这就是为什么它在控制台而不是实际应用程序上起作用的原因

基本上重新启动Puma可以解决此问题。是的,听起来很愚蠢:)