lib/searchkick.rb in searchkick-1.4.1 vs lib/searchkick.rb in searchkick-1.4.2
- old
+ new
@@ -29,10 +29,11 @@
class ImportError < Error; end
class << self
attr_accessor :search_method_name, :wordnet_path, :timeout, :models
attr_writer :client, :env, :search_timeout
+ attr_reader :aws_credentials
end
self.search_method_name = :search
self.wordnet_path = "/var/lib/wn_s.pl"
self.timeout = 10
self.models = []
@@ -44,10 +45,15 @@
Elasticsearch::Client.new(
url: ENV["ELASTICSEARCH_URL"],
transport_options: {request: {timeout: timeout}, headers: {content_type: "application/json"}}
) do |f|
f.use Searchkick::Middleware
+ f.request :aws_signers_v4, {
+ credentials: Aws::Credentials.new(aws_credentials[:access_key_id], aws_credentials[:secret_access_key]),
+ service_name: "es",
+ region: aws_credentials[:region] || "us-east-1"
+ } if aws_credentials
end
end
end
def self.env
@@ -91,10 +97,16 @@
else
self.callbacks_value = value
end
end
+ def self.aws_credentials=(creds)
+ require "faraday_middleware/aws_signers_v4"
+ @aws_credentials = creds
+ @client = nil # reset client
+ end
+
# private
def self.queue_items(items)
queued_items.concat(items)
perform_bulk unless callbacks_value == :bulk
end
@@ -110,10 +122,10 @@
def self.perform_items(items)
if items.any?
response = client.bulk(body: items)
if response["errors"]
first_with_error = response["items"].map do |item|
- (item["index"] || item["delete"])
+ (item["index"] || item["delete"] || item["update"])
end.find { |item| item["error"] }
raise Searchkick::ImportError, "#{first_with_error["error"]} on item with id '#{first_with_error["_id"]}'"
end
end
end