lib/kithe.rb in kithe-0.2.0 vs lib/kithe.rb in kithe-0.3.0
- old
+ new
@@ -1,6 +1,7 @@
require "kithe/engine"
+require 'kithe/indexable_settings'
module Kithe
# for ruby-progressbar
STANDARD_PROGRESS_BAR_FORMAT = "%a %t: |%B| %R/s %c/%u %p%% %e"
@@ -13,6 +14,69 @@
# We don't want an isolated engine, but we do want this, part of what isolated engines do.
# Will make generators use namespace scope, among other things.
def self.railtie_namespace
Kithe::Engine
end
+
+ # Global Kithe::Indexable settings, actually a Kithe::IndexableSettings
+ # object, but you will generally use it as a simple value object with getters
+ # and setters.
+ #
+ # * solr_url: Where to send to Solr when indexing, the base url
+ #
+ # Kithe.indexable_settings.solr_url = "http://localhost:8983/solr/collection_name"
+ #
+ # * model_name_solr_field: If you'd like a custom solr field to store model class name in.
+ #
+ # Kithe.indexable_settings.model_name_solr_field = "my_model_name_field"
+ #
+ # * solr_id_value_attribute: What attribute from your AR models to send to Solr
+ # `id` uniqueKey field, default the AR `id` pk, you may wish to set to `friendlier_id`.
+ #
+ # * writer_settings: Settings to be passed to the Traject writer, by default a
+ # Traject::SolrJsonWriter. To maintain the default settings, best to merge
+ # your new ones into defaults.
+ #
+ # Kithe.indexable_settings.writer_settings.merge!(
+ # # by default we send a softCommit on every update, maybe you
+ # # want not to?
+ # "solr_writer.solr_update_args" => {}
+ # # extra long timeout?
+ # "solr_writer.http_timeout" => 100
+ # )
+ #
+ # * writer_class_name: By default Traject::SolrJsonWriter, but maybe
+ # you want to set to some other Traject::Writer. The writer Kithe::Indexable
+ # will send index add/remove requests to.
+ #
+ # Kithe.indexable_settings.writer_class_name = "Traject::SomeOtherWriter"
+ #
+ # * disable_callbacks: set to true to globally disable automatic after_commit
+ #
+ #
+ # The settings need to live here not in Kithe::Indexable, to avoid terrible
+ # Rails dev-mode class-reloading weirdnesses. This module is not reloaded.
+ mattr_accessor :indexable_settings do
+ # set up default settings
+ IndexableSettings.new(
+ solr_url: "http://localhost:8983/solr/default",
+ model_name_solr_field: "model_name_ssi",
+ solr_id_value_attribute: "id",
+ writer_class_name: "Traject::SolrJsonWriter",
+ writer_settings: {
+ # as default we tell the solrjsonwriter to use no threads,
+ # no batching. softCommit on every update. Least surprising
+ # default configuration.
+ "solr_writer.thread_pool" => 0,
+ "solr_writer.batch_size" => 1,
+ "solr_writer.solr_update_args" => { softCommit: true },
+ "solr_writer.http_timeout" => 3,
+ "logger" => Rails.logger,
+
+ # MAYBE? no skippable exceptions please
+ # "solr_writer.skippable_exceptions" => []
+ },
+ disable_callbacks: false
+ )
+end
+
end