我有一个在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
有人对可能出什么问题有任何建议吗?
答案 0 :(得分:0)
好吧,这个问题比我想象的要容易得多。
问题在于Nginx正在与Puma一起使用,并且重新启动Nginx不会重新启动Puma进程,因此我尝试的任何更改都未应用于正在运行的应用程序。这就是为什么它在控制台而不是实际应用程序上起作用的原因
基本上重新启动Puma可以解决此问题。是的,听起来很愚蠢:)