2014-01-24 125 views
0

我們是有點大的提升的中間:的Rails 3 ThinkingSphinx多租戶

  • Rails 2.3至3.2 Rails
  • 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

我認爲這是因爲思維獅身人面像v3堅持搜索之間的獅身人面像連接。這可以禁用,但該功能出現在TS v3.1.0,這將意味着一些更多的調整。

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

如果您與獅身人面像2.0.8(而不是,比方說,2.1.4)貼,請務必仔細閱讀TS V3.1.0發行說明(這可能是值得一讀反正): https://github.com/pat/thinking-sphinx/releases/tag/v3.1.0

+0

Thanks @Pat!我們最終提出了一個稍微不同的解決方案 - 但我很欣賞答案,因爲這指出了我們的看法。我已經在下面發佈了 - 你能檢查一下並告訴我們它是否瘋了嗎? – kddeisz