La préfixation de votre index des noms pour l'environnement actuel
Vous pouvez définir un indice différent de nom pour chaque environnement (dans votre cas: l'environnement de test).
Par exemple, vous pouvez créer un initialiseur dans
config/initializers/tire.rb
avec la ligne suivante:
Tire::Model::Search.index_prefix "#{Rails.application.class.parent_name.downcase}_#{Rails.env.to_s.downcase}"
Un concevable approche pour la suppression de l'index
En supposant que vous avez des modèles nommé à la Clientèle, l'Ordre et le Produit, placez le code suivant sur votre test de démarrage/à l'avant-bloc/chaque-run-bloc.
# iterate over the model types
# there are also ways to fetch all model classes of the rails app automaticly, e.g.:
# http://stackoverflow.com/questions/516579/is-there-a-way-to-get-a-collection-of-all-the-models-in-your-rails-app
[Customer, Order, Product].each do |klass|
# make sure that the current model is using tire
if klass.respond_to? :tire
# delete the index for the current model
klass.tire.index.delete
# the mapping definition must get executed again. for that, we reload the model class.
load File.expand_path("../../app/models/#{klass.name.downcase}.rb", __FILE__)
end
end
Alternative
Une alternative pourrait être de créer un autre ElasticSearch instance pour tester sur un autre port, disons 1234.
Dans votre environnement de test/.rb vous pouvez ensuite définir les
Tire::Configuration.url "http://localhost:1234"
Et à un endroit approprié (par exemple, votre test de démarrage), vous pouvez supprimer tous les index de la ElasticSearch test-exemple avec:
Tire::Configuration.client.delete(Tire::Configuration.url)
Peut-être que vous devez toujours vous assurer que vos Pneus sont-Cartographie des définitions pour votre modèle de classes sont encore appelés.