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 directory.
> > The searchd location is referenced in the sphinx.yml file for delta
> > indexing. I have configured delayed deltas and do see the entries
> > being made in the delayed_jobs table. They are properly processed when
> > the rake task runs.
>
> > I've been searching all night for pointers without luck. Any
> > assistance would be greatly appreciated.
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---