Тестирование мыслящего сфинкса с acts_as_taggable_on Запрос ошибочных имен таблиц - PullRequest
2 голосов
/ 24 февраля 2012

Начнем с того, что производственная сторона работает просто отлично, только когда я запускаю тесты, возникают ошибки.

Как указано в заголовке, я использую Thinking Sphinx с гемом act_as_taggle.Вот некоторые фрагменты из модели, которую я использую:

class Special < ActiveRecord::Base
  acts_as_taggable
  acts_as_taggable_on :cuisines, :meals

  ...

  define_index do
    ...
    indexes cuisine_taggings.tag(:name), :as => :cuisine_tags, :facet => true
    indexes meal_taggings.tag(:name), :as => :meal_tags
    ...
  end

  ...

end

Поиск выглядит примерно так:

Special.search("some query", {
  :conditions => {:meal_tags => "dinner"} ,
  :geo => coordinates,
  :retry_stale => true,
  :with => {
    "@geodist" => 0.0..distance,
    :timeframe => [1,2],
  },
  :page => page, 
  :per_page => Kaminari.config.default_per_page,
  :order => "#{day} desc, @relevance DESC, @geodist ASC"
}

Я вижу следующие ошибки:

Mysql2::Error: Unknown column 'cuisine_taggings_specials.context' in 'where clause': SELECT `taggings`.`id` AS t0_r0, `taggings`.`tag_id` AS t0_r1, `taggings`.`taggable_id` AS t0_r2, `taggings`.`taggable_type` AS t0_r3, `taggings`.`tagger_id` AS t0_r4, `taggings`.`tagger_type` AS t0_r5, `taggings`.`context` AS t0_r6, `taggings`.`created_at` AS t0_r7, `tags`.`id` AS t1_r0, `tags`.`name` AS t1_r1 FROM `taggings` LEFT OUTER JOIN `tags` ON `tags`.`id` = `taggings`.`tag_id` WHERE `taggings`.`taggable_id` = 1 AND `taggings`.`taggable_type` = 'Special' AND (`cuisine_taggings_specials`.context = 'cuisines')

Как видите, запрос пытается найти таблицу «kitchen_taggings_specials" вместо таблицы тегов.

Я перестраиваю индексы в dev и тестирую каждый раз, когда меняю индекс.

Как я уже сказал, производство и разработка работают отлично, только когда я запускаю свои тесты.

1 Ответ

3 голосов
/ 01 марта 2012

Интересно, связано ли это с тем, что полиморфные данные не заполняются, когда тестовая среда генерирует конфигурацию. Как вы проводите тесты? Огурец, прямо капибара или что-то еще?

Как только вы добавите некоторые данные, попробуйте восстановить конфигурацию и затем выполнить индексацию:

ThinkingSphinx::Test.stop  # if sphinx is already running?
ThinkingSphinx::Test.start # this generates config, indexes, and starts Sphinx.

Конечно, это не полезно, если ошибка происходит вне вашей настройки ... Отсюда первый вопрос:)

...