【发布时间】:2019-01-01 16:06:43
【问题描述】:
我有一个在 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
是否有人对可能出现的问题提出任何建议?
【问题讨论】:
-
我忘了说我正在使用宝石:elasticsearch-model 和 elasticsearch-rails
-
只是在黑暗中拍摄。难道
rails c运行在开发模式,rails s运行生产? -
@DennyMueller 我试过了,但它适用于控制台上的任何环境(rails c)
标签: ruby-on-rails amazon-web-services elasticsearch