我们正在进行一次大的升级:
Rails
2.3至Rails
3.2 ThinkingSphinx
1.4.1至ThinkingSphinx
3.0.6 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
每个租户都有自己的sphinx配置文件,每个都在自己的端口上搜索。我们的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
如果你只搜索一个租户,它就可以了。但是,当您搜索一个然后另一个时,会发生以下两个错误之一:
有没有人有办法让这个工作?如果你在外面可以帮忙吗?
更新:我们认为它与Passenger
有关。当第一个实例启动时,它一直适用于该租户。但是,从那时起乘客实例无法搜索任何其他租户。
答案 0 :(得分:1)
我认为这是因为Thinking Sphinx v3在搜索之间持续存在Sphinx连接。这可以被禁用,但该功能出现在TS v3.1.0中,这将意味着一些更多的调整。
# in an initializer:
ThinkingSphinx::Connection.persistent = false
如果您坚持使用Sphinx 2.0.8(而不是2.1.4),请确保您阅读了TS v3.1.0发行说明(无论如何都值得阅读):{{3} }
答案 1 :(得分: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