2014-01-24 2 views
0

Мы находимся в середине бита большого обновления:Rails 3 ThinkingSphinx Multitenancy

  • Rails 2,3 до Rails 3,2
  • ThinkingSphinx 1.4.1 до 3.0.6 ThinkingSphinx
  • Sphinx 0.9. 9 до Sphinx 2.0.8

И вот наша конфигурация ThinkingSphinx не работает. У нас многоуровневая настройка, поэтому немного сложнее, как мы подключаемся. Наш метод set_sphinx_connection вызывается каждый раз, когда выполняется действие поиска. Вот как мы привыкли это делать:

def set_sphinx_connection 
    Thread.current[:thinking_sphinx_environment] = "tenant_#{Tenant::active.id}" 
    ThinkingSphinx::Configuration.instance.reset 
end 

А вот как мы пытаемся сделать это сейчас:

def set_sphinx_connection 
    framework = ThinkingSphinx::Frameworks::Plain.new 
    framework.environment = "tenant_#{Tenant::active.id}" 
    ThinkingSphinx::Configuration.instance.framework = framework 
end 

Каждый жилец имеет свой собственный файл сфинкс конфигурации, и каждый ищет сам по себе порт. Отрывок из нашего thinking_sphinx.yml ниже:

tenant_1: 
    mysql41: 9312 
    enable_star: true 
    min_infix_len: 1 
tenant_2: 
    mysql41: 9313 
    enable_star: true 
    min_infix_len: 1 
tenant_3: 
    mysql41: 9314 
    enable_star: true 
    min_infix_len: 1 

Если вы только когда-либо поиск по одному арендатору, он работает просто отлично. Тем не менее, при поиске по одной, а затем другому, один из двух ошибок происходят:

  • залежалых ошибки ID на втором жильца
  • поисковых возвращается в подсчетах от первого арендатора второго арендатора

У кого-нибудь есть способ получить эту работу? Пэт, если ты там, можешь помочь?

ОБНОВЛЕНИЕ: Мы считаем, что это связано с Passenger. Когда первый экземпляр запускается, он работает для этого арендатора последовательно. Однако с тех пор этот пассажирский экземпляр не может искать другого арендатора.

ответ

0

Поместите это здесь, если кто-то другой столкнется с этой проблемой. Это то, что закончилось тем, что работало.

def set_sphinx_connection 
    framework = ThinkingSphinx::Frameworks::Plain.new 
    framework.environment = "tenant_#{Tenant::active.id}" 
    ThinkingSphinx::Configuration.instance.framework = framework 
    ThinkingSphinx::Connection.pool.clear 
end 
+0

Кажется хорошо для меня :) – pat

1

Я думаю, что это потому, что мышление Sphinx v3 продолжает связывать Sphinx между поисками. Это можно отключить, но эта функция появилась в TS v3.1.0, что будет означать еще несколько настроек.

# in an initializer: 
ThinkingSphinx::Connection.persistent = false 

Если вы наклеивания с Sphinx 2.0.8 (вместо, скажем, 2.1.4), пожалуйста, убедитесь, что вы читали примечания к выпуску v3.1.0 TS (которые, вероятно, стоит прочитать в любом случае): https://github.com/pat/thinking-sphinx/releases/tag/v3.1.0

+0

Спасибо @Pat! Мы закончили тем, что придумали немного другое решение, но я ценю ответ, потому что это указывало на него. Я разместил его ниже - не могли бы вы проверить его и рассказать нам, если он сумасшедший? – kddeisz

Смежные вопросы