Ruby 1.9.3 的 Sphinx 问题?
Sphinx Issue with Ruby 1.9.3?
我最近将一个网络应用程序从 ruby 1.8.7 移到了 1.9.3,一切都很顺利,除了搜索。在碰撞 ruby 之前一切正常。这是我的控制器代码:
ids = Business.simple_search_for_ids_with_location(@term, @city, @state, {}, :per_page => 2500)
@results = Business.paginate :conditions => { :id => ids }, :page => ActionController::Base.helpers.sanitize(params[:page]), :include => [:category]
@results = @results.sort{|a,b| a.name.downcase <=> b.name.downcase}
@count = @results.total_entries
从我的模型:
def self.simple_search_for_ids_with_location(term, city, state, conditions={}, options={})
ids = Business.compact_search_for_ids(term, {:conditions => { :address_city => city, :address_state => state }.merge(conditions), :order => :business_name}.merge(options))
if state.blank?
by_state = Business.compact_search_for_ids(term, {:conditions => { :address_state => city }.merge(conditions), :order => :business_name}.merge(options))
ids += by_state
end
ids
end
def self.compact_search_for_ids(*args)
search_for_ids(*args).compact
end
当在浏览器中 运行 我得到 undefined method total_entries for []:Array
违规行是@count = @results.total_entries
我已确保 sphinx 已安装并且 thinking_sphinx 已编入索引并且 运行。
似乎一切正常,但返回的是空数组?为什么以前可以正常工作?
我很感激能在这里得到任何帮助,因为我真的不想回到 ruby 1.8.7。谢谢。
通过上面评论中的一些讨论找到了解决方案。一些想法可能会对遇到类似问题的其他人有所帮助:
- 如果您使用的是 Thinking Sphinx v1.x 或 2.x,最好坚持使用旧的 Sphinx 版本。建议不要高于 Sphinx v2。0.x。
- 确保在升级 Thinking Sphinx 时 运行
rake ts:rebuild
,当然在升级 Sphinx 本身时(其索引格式通常在次要版本之间发生变化)。
- 如果您能够升级到 Ruby/Rails/Thinking Sphinx 的更新版本,这总是有助于长期维护(但可以理解并非总是可行)。
我最近将一个网络应用程序从 ruby 1.8.7 移到了 1.9.3,一切都很顺利,除了搜索。在碰撞 ruby 之前一切正常。这是我的控制器代码:
ids = Business.simple_search_for_ids_with_location(@term, @city, @state, {}, :per_page => 2500)
@results = Business.paginate :conditions => { :id => ids }, :page => ActionController::Base.helpers.sanitize(params[:page]), :include => [:category]
@results = @results.sort{|a,b| a.name.downcase <=> b.name.downcase}
@count = @results.total_entries
从我的模型:
def self.simple_search_for_ids_with_location(term, city, state, conditions={}, options={})
ids = Business.compact_search_for_ids(term, {:conditions => { :address_city => city, :address_state => state }.merge(conditions), :order => :business_name}.merge(options))
if state.blank?
by_state = Business.compact_search_for_ids(term, {:conditions => { :address_state => city }.merge(conditions), :order => :business_name}.merge(options))
ids += by_state
end
ids
end
def self.compact_search_for_ids(*args)
search_for_ids(*args).compact
end
当在浏览器中 运行 我得到 undefined method total_entries for []:Array
违规行是@count = @results.total_entries
我已确保 sphinx 已安装并且 thinking_sphinx 已编入索引并且 运行。
似乎一切正常,但返回的是空数组?为什么以前可以正常工作?
我很感激能在这里得到任何帮助,因为我真的不想回到 ruby 1.8.7。谢谢。
通过上面评论中的一些讨论找到了解决方案。一些想法可能会对遇到类似问题的其他人有所帮助:
- 如果您使用的是 Thinking Sphinx v1.x 或 2.x,最好坚持使用旧的 Sphinx 版本。建议不要高于 Sphinx v2。0.x。
- 确保在升级 Thinking Sphinx 时 运行
rake ts:rebuild
,当然在升级 Sphinx 本身时(其索引格式通常在次要版本之间发生变化)。 - 如果您能够升级到 Ruby/Rails/Thinking Sphinx 的更新版本,这总是有助于长期维护(但可以理解并非总是可行)。