Yeah, didn't think that'd be the cause. Ah well. What are the parameters being used in the request? Have you tried the exact same query in script/console? Also, when running in script/ console, have you actually checked the array contents? TS 1.2 doesn't request results from Sphinx until they're actually needed - hence why the error is happening in the view, not the controller.
-- Pat On 30/07/2009, at 5:09 PM, Andrew Lippert wrote: > > I removed the set_properties for lat/lng with no change. I had high > hopes it was something really strange related to your comment above. > Now we are back to something directly related to my incompetence. > Bummer. > > On Jul 30, 9:05 am, Andrew Lippert <[email protected]> wrote: >> Sorry!! >> >> def self.member_search_sphinx(criteria, vip=false) >> return Member.sphinx_search(criteria[:terms], >> :page => criteria[:page], >> :limit => criteria[:limit], >> :origin => criteria[:origin], >> :distance => criteria[:distance], >> :vip => vip) >> end >> >> I'll check the lat/lng stuff. >> >> On Jul 30, 9:01 am, Pat Allan <[email protected]> wrote: >> >> >> >>> Response times ebb and flow - you're just lucky you caught me at the >>> latter :) >> >>> You've provided Member.sphinx_search, but you're using >>> Search.member_search_sphinx - got the code for the latter? >> >>> Also, it seems the error is happening when the latitude attribute is >>> being set - you don't actually need the set_property calls for the >>> lat/ >>> lng attributes, because your names for them are guessable by >>> Thinking >>> Sphinx. If you wish to keep them anyway, try having the values as >>> symbols, not strings (not that it should make a difference, >>> especially >>> if everything works in development). >> >>> Cheers >> >>> -- >>> Pat >> >>> On 30/07/2009, at 4:49 PM, Andrew Lippert wrote: >> >>>> Pat, >> >>>> I'm amazed at your response time! >> >>>> Everything is working fine in development. It is only the >>>> production >>>> server that is having problems. So, I'm sure I've missed something >>>> crucial. >> >>>> Here's the code: >> >>>> Model - >> >>>> define_index do >>>> # fields >>>> indexes first_name >>>> indexes last_name >>>> indexes [first_name, last_name], :as => :full_name >>>> indexes permalink >>>> indexes primary_business_title >>>> indexes primary_business_location >>>> indexes what_i_do >>>> indexes needs >>>> indexes specialties >>>> indexes experience >>>> indexes education >>>> indexes categories.name, :as => :categories >>>> indexes taggings.tag.name, :as => :tags >> >>>> # attributes >>>> has membership_level_id, participation_points >>>> has '(membership_level_id + has_primary_image * 150) + IFNULL >>>> (participation_points + 1, 1)', :as => :rating, :type => :integer >>>> has 'RADIANS(primary_business_lat)', :as => :lat, :type >>>> => :float >>>> has 'RADIANS(primary_business_long)', :as => :lng, :type >>>> => :float >> >>>> # properties >>>> set_property :latitude_attr => 'lat' >>>> set_property :longitude_attr => 'lng' >>>> set_property :field_weights => {:categories => >>>> 5, :primary_business_title => 4, :what_i_do => 3} >>>> set_property :delta => :delayed >> >>>> # filter >>>> where "deleted_at IS NULL AND activated_at IS NOT NULL" >> >>>> end >> >>>> def self.sphinx_search(terms = "", options ={}) >>>> limit = options.delete(:limit) || self.per_page >>>> page = (options.delete(:page) || 1).to_i >>>> page = (page < 1) ? 1 : page >>>> vip = options.delete(:vip) || false >>>> limit = self.vip_per_page if vip >>>> fields = options.delete(:fields) >>>> distance = options.delete(:distance) || Session.default_distance >>>> || self.default_distance >> >>>> @search_options = { :page => page, >>>> :per_page => limit, >>>> :star => true, >>>> :match_mode => :extended } >> >>>> if origin = options.delete(:origin) >>>> lat = (origin[0] / 180.0) * Math::PI >>>> lng = (origin[1] / 180.0) * Math::PI >>>> distance = distance.to_i * 1609.344 >>>> @search_options.merge!(:geo => [lat, lng], :with => >>>> { "@geodist" >>>> => 0.0..distance }) >>>> end >> >>>> if vip >>>> @search_options.merge!(:without => { :membership_level_id => >>>> 1..2 }) >>>> end >> >>>> @search_options.merge!(:sort_mode => :expr, >>>> :sort_by => '@weight * 1.5 + rating' >>>> ) >> >>>> results = self.search(terms, @search_options) >> >>>> end >> >>>> Controller - >> >>>> @members = Search.member_search_sphinx(@tmp_param[:search]) >> >>>> View - >> >>>> members.html.erb: >> >>>> <div id="search_results"> >>>> <%= render :partial => 'members/list', :object => @members %> >>>> </div> >> >>>> _list.html.erb >> >>>> <%- >> >>>> # members / list >> >>>> list ||= @members >>>> paginate = true if paginate.nil? >>>> size ||= 'icon' >>>> up ||= 3 >> >>>> # little shortcut >>>> is_cat = (params[:action] == "category") >>>> num_per_page = is_cat ? Member.per_cat_page : Member.per_page >>>> path = is_cat ? "/#...@city[:name].downcase.gsub(/\s/, '-')}/# >>>> {[email protected]}" : search_path('members') >> >>>> if list.total_entries > 0 >> >>>> -%> >> >>>> Exception: >> >>>> ActionView::TemplateError: You have a nil object when you didn't >>>> expect it! You might have expected an instance of Array. The error >>>> occurred while evaluating nil.length >> >>>> On line #16 of app/views/members/_list.html.erb >> >>>> 13: num_per_page = is_cat ? Member.per_cat_page : Member.per_page >> >>>> 14: path = is_cat ? "/#...@city[:name].downcase.gsub(/\s/, '-')}/# >>>> {[email protected]}" : search_path('members') >> >>>> 15: >> >>>> 16: if list.total_entries > 0 >> >>>> 17: >> >>>> 18: -%> >> >>>> 19: >> >>>> [GEM_ROOT]/gems/freelancing-god-thinking-sphinx-1.2.1/lib/./vendor/ >>>> riddle/lib/riddle/client/message.rb:20:in `send' >> >>>> [GEM_ROOT]/gems/freelancing-god-thinking-sphinx-1.2.1/lib/./vendor/ >>>> riddle/lib/riddle/client/message.rb:20:in `append_string' >> >>>> [GEM_ROOT]/gems/freelancing-god-thinking-sphinx-1.2.1/lib/./vendor/ >>>> riddle/lib/riddle/client.rb:531:in `query_message' >> >>>> [GEM_ROOT]/gems/freelancing-god-thinking-sphinx-1.2.1/lib/./vendor/ >>>> riddle/lib/riddle/client.rb:286:in `query' >> >>>> [GEM_ROOT]/gems/freelancing-god-thinking-sphinx-1.2.1/lib/ >>>> thinking_sphinx/search.rb:203:in `populate' >> >>>> [GEM_ROOT]/gems/freelancing-god-thinking-sphinx-1.2.1/lib/ >>>> thinking_sphinx/search.rb:279:in `call' >> >>>> [GEM_ROOT]/gems/freelancing-god-thinking-sphinx-1.2.1/lib/ >>>> thinking_sphinx/search.rb:279:in `retry_on_stale_index' >> >>>> [GEM_ROOT]/gems/freelancing-god-thinking-sphinx-1.2.1/lib/ >>>> thinking_sphinx/search.rb:200:in `populate' >> >>>> [GEM_ROOT]/gems/freelancing-god-thinking-sphinx-1.2.1/lib/ >>>> thinking_sphinx/search.rb:149:in `total_entries' >> >>>> app/views/members/_list.html.erb:16 >> >>>> app/views/search/members.html.erb:14 >> >>>> app/views/search/members.html.erb:12 >> >>>> app/controllers/search_controller.rb:101:in `members' >> >>>> Thank you for taking a look!! >> >>>> On Jul 30, 8:35 am, Pat Allan <[email protected]> wrote: >>>>> Hi Andrew >> >>>>> What's the output from production.log? And what's the line of code >>>>> where you're calling the search method? >> >>>>> -- >>>>> Pat >> >>>>> On 30/07/2009, at 4:25 PM, Andrew Lippert wrote: >> >>>>>> I have a properly configured and functioning development >>>>>> environment >>>>>> configured with the latest Ruby Enterprise, Passenger, Thinking >>>>>> Sphinx, Sphinx, etc. Everything works fine. >> >>>>>> I have deployed to production. All software installs went well, >>>>>> migrations applied, etc. >> >>>>>> I am able to successfully run searchd against a newly created >>>>>> index >>>>>> built using the rake tasks. I can use console to search my model >>>>>> successfully. HOWEVER, when access the application I am getting >>>>>> nil >>>>>> results returned to the views causing all sorts of exceptions. >> >>>>>> Here's the sphinx.yml - >> >>>>>> production: >>>>>> enable_star: 1 >>>>>> min_prefix_length: 3 >>>>>> min_infix_length: 4 >>>>>> morphology: stem_en >>>>>> config_file: /home/www/biznik.com/shared/config/ >>>>>> production.sphinx.conf >>>>>> searchd_file_path: /home/www/biznik.com/shared/db/sphinx/ >>>>>> production >>>>>> searchd_log_file: /home/www/biznik.com/shared/log/searchd.log >>>>>> query_log_file: /home/www/biznik.com/shared/log/ >>>>>> searchd.query.log >>>>>> pid_file: /home/www/biznik.com/shared/pids/ >>>>>> searchd.production.pid >>>>>> bin_path: /usr/local/bin >> >>>>>> Samples from the searchd log file look like the service is not >>>>>> being >>>>>> hit when the model is searched from the production app: >> >>>>>> [Thu Jul 30 08:13:52.829 2009] 0.000 sec [scan/2/rel 1 (0,20)] >>>>>> [member_core] >>>>>> [Thu Jul 30 08:14:39.027 2009] 0.000 sec [scan/2/rel 1 (0,20)] >>>>>> [member_core] >>>>>> [Thu Jul 30 08:17:31.074 2009] 0.000 sec [scan/2/rel 1 (0,20)] >>>>>> [member_core] >>>>>> [Thu Jul 30 08:18:03.899 2009] 0.000 sec [scan/2/rel 1 (0,20)] >>>>>> [member_core] >>>>>> [Thu Jul 30 08:18:09.384 2009] 0.000 sec [scan/2/rel 1 (0,20)] >>>>>> [member_core] >>>>>> [Thu Jul 30 08:18:40.661 2009] 0.000 sec [scan/2/rel 1 (0,20)] >>>>>> [member_core] >>>>>> [Thu Jul 30 08:19:11.654 2009] 0.000 sec [scan/2/rel 1 (0,20)] >>>>>> [member_core] >>>>>> [Thu Jul 30 08:20:35.390 2009] 0.000 sec [scan/2/rel 1 (0,20)] >>>>>> [member_core] >>>>>> [Thu Jul 30 08:20:38.376 2009] 0.000 sec [scan/2/rel 1 (0,20)] >>>>>> [member_core] >>>>>> [Thu Jul 30 08:20:50.652 2009] 0.000 sec [scan/2/rel 1 (0,20)] >>>>>> [member_core] >>>>>> [Thu Jul 30 08:21:00.504 2009] 0.000 sec [scan/2/rel 1 (0,20)] >>>>>> [member_core] >>>>>> [Thu Jul 30 08:21:04.625 2009] 0.000 sec [scan/2/rel 1 (0,20)] >>>>>> [member_core] >>>>>> [Thu Jul 30 08:21:33.066 2009] 0.000 sec [scan/2/rel 1 (0,20)] >>>>>> [member_core] >>>>>> [Thu Jul 30 08:22:30.614 2009] 0.000 sec [scan/2/rel 1 (0,20)] >>>>>> [member_core] >>>>>> [Thu Jul 30 08:22:45.863 2009] 0.000 sec [scan/2/rel 1 (0,20)] >>>>>> [member_core] >>>>>> [Thu Jul 30 08:23:30.611 2009] 0.000 sec [scan/2/rel 1 (0,20)] >>>>>> [member_core] >> >>>>>> The db paths are properly symlinked to the current app/db... >> >> read more ยป > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Thinking Sphinx" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/thinking-sphinx?hl=en -~----------~----~----~----~------~----~------~--~---
