Hello Pat,
I have been able to reproduce the problem by creating a new rails
application
from scratch with thinking-sphinx installed as a vendor plugin.
If I do the following:
* Execute "rails test_app"
* Configure the development environment to run with cache_classes set
to true (to mimic production)
* Create the migrations and define models with indexes (as listed
below)
* Generate an Observer on the Order model: "ruby script/generate
observer Order"
* Activate the OrderObserver within environment.rb
* Execute: "rake ts:config && rake ts:index"
I get the same error that I've been harping on about ;o)
As soon as I disable the observer, and re-configure thinking-sphinx; I
am able to rotate my indexes correctly.
So it appears to be related to my use of an Observer on the Order
model.
Note: The observer is "as generated" without any additional code.
I hope this clarifies the problem I have been having.
Kind regards, Oliver.
======
Models:
======
class Order < ActiveRecord::Base
belongs_to :customer
define_index do
indexes customer.account_ref, :as => :account_ref
indexes [customer.contact_name, customer.company_name], :as
=> :customer_name
end
end
class Customer < ActiveRecord::Base
has_many :orders
define_index do
indexes :account_ref
indexes :contact_name
indexes :company_name
end
end
========
Migrations:
========
class CreateCustomers < ActiveRecord::Migration
def self.up
create_table :customers do |t|
t.account_ref, :string
t.contact_name :string
t.company_name :string
t.timestamps
end
end
def self.down
drop_table :customers
end
end
class CreateOrders < ActiveRecord::Migration
def self.up
create_table :orders do |t|
t.customer_id :integer
t.timestamps
end
end
def self.down
drop_table :orders
end
end
On 30 Nov, 04:34, Pat Allan <[email protected]> wrote:
> Hi Oliver
>
> Unfortunately, I can't reproduce this - I created a test app with
> order and company models, with a belongs_to association, and indexes
> on both, including the delta index on order. All indexes fine.
>
> If you'd like, perhaps you can send me a copy of your app, and I can
> try to make the issue happen on my machine?
>
> --
> Pat
>
> On 29/11/2009, at 8:12 PM, karmacoma wrote:
>
> > Correction:
>
> > I also have an index definition on my Customer model using these same
> > fields: account_ref, contact_name, *company_name*.
>
> > On 29 Nov, 09:10, karmacoma <[email protected]> wrote:
> >> Hi Pat,
> >> Many thanks! I have just tried out your most recent commit, and it
> >> appears to have fixed my main problem of destroying records within
> >> the
> >> index.
>
> >> Thanks again for the pointer on my index definition; I hadn't noticed
> >> that.
>
> >> However, I am still trying to resolve the issue of rebuilding my
> >> indexes in development mode, with cache_classes set to true.
> >> If I disable these two lines in my Order index definition, everything
> >> works fine:
>
> >> indexes customer.account_ref
> >> indexes [customer.contact_name, customer.company_name], :as
> >> => :customer_name
>
> >> I also have an index definition on my Customer model using these same
> >> fields: account_ref, contact_name, customer_name.
> >> Disabling these fields within the Customer index definition has no
> >> effect either way.
>
> >> The only way I can get it to work is by disabling these two field
> >> indexes.
> >> The problem is that my application relies upon them, and I'm
> >> reluctant
> >> to push any changes to production that prevent me from rotating my
> >> indexes.
>
> >> Kind regards, Oliver.
>
> >> On 29 Nov, 01:50, Pat Allan <[email protected]> wrote:
>
> >>> Okay, there's been another update...
>
> >>> Current status:
> >>> -> With config.cache_classes = true
> >>> 1. Fixed
> >>> 2. Can't reproduce
> >>> -> With config.cache_classes = false
> >>> 1. Can't reproduce
> >>> 2. All fine.
>
> >>> It's possible that in fixing the nil.local_options issue, I've fixed
> >>> others. If you could give it a spin, that'd be great.
>
> >>> Also, one thing you might want to change in your index definition:
> >>> indexes customer.contact_name, customer.company_name, :as
> >>> => :customer_name
> >>> To:
> >>> indexes [customer.contact_name, customer.company_name], :as
> >>> => :customer_name
>
> >>> You were creating two fields with the same name, and I'm not sure
> >>> how
> >>> Sphinx handles that. My change combines the two columns into a
> >>> single
> >>> field called customer_name.
>
> >>> --
> >>> Pat
>
> >>> On 29/11/2009, at 1:14 AM, karmacoma wrote:
>
> >>>> Hi,
> >>>> I have thinking-sphinx installed as a vendor/plugin.
>
> >>>> My index definition for looks like:
>
> >>>> ===
> >>>> define_index do
> >>>> # Fields
> >>>> #
> >>>> indexes :id, :as => :order_id
> >>>> indexes customer.account_ref
> >>>> indexes customer.contact_name, customer.company_name, :as
> >>>> => :customer_name
> >>>> indexes line_items.code
> >>>> indexes line_items.name
>
> >>>> # Attributes
> >>>> #
> >>>> has :status_code
>
> >>>> # Properties
> >>>> #
> >>>> set_property :delta => true
> >>>> end
> >>>> ===
>
> >>>> Here is what I have be able to establish so far.
> >>>> Note: I'm testing all of this in development mode.
>
> >>>> -> With config.cache_classes = true
>
> >>>> 1. If I perform a search, destroy a record within the results, re-
> >>>> perform the same search.
> >>>> I still get the same "nil.local_options" error as described in my
> >>>> previous email.
>
> >>>> 2. I am unable to rotate my indexes using rake ts:index.
>
> >>>> -> With config.cache_classes = false
>
> >>>> 1. If I perform a search, destroy a record within the results, re-
> >>>> perform the same search.
> >>>> I get a RuntimeError: "Called id for nil, which would mistakenly
> >>>> be 4"
>
> >>>> 2. I am able to rotate my indexes.
>
> >>>> Thanks for your efforts.
> >>>> Kind regards, Oliver.
>
> >>>> On Nov 28, 1:40 pm, Pat Allan <[email protected]> wrote:
> >>>>> Hmm, I can't seem to reproduce the indexing issue...
>
> >>>>> How do you have TS installed? (gem or plugin) And what's your
> >>>>> index
> >>>>> definition looking like in Order?
>
> >>>>> --
> >>>>> Pat
>
> >>>>> On 28/11/2009, at 11:23 PM, karmacoma wrote:
>
> >>>>>> Hi Pat,
>
> >>>>>> Okay, deleting a record now works (which is great!).
> >>>>>> However, now I suffering a slightly different problem.
>
> >>>>>> If I perform a search; Destroy one of the records within the
> >>>>>> results;
> >>>>>> Then re-perform the search.
> >>>>>> I now get the following error:
>
> >>>>>> ===
> >>>>>> "You have a nil object when you didn't expect it!
> >>>>>> The error occurred while evaluating nil.local_options"
> >>>>>> ===
>
> >>>>>> With the stack trace leading me to: thinking-sphinx/lib/
> >>>>>> thinking_sphinx/search.rb:310:in `client'.
>
> >>>>>> Secondly, I am unable to re-index my records, as I get the
> >>>>>> following
> >>>>>> error when I issue rake ts:index:
>
> >>>>>> ===
> >>>>>> Generating Configuration to /Users/Oliver/git/greyville/config/
> >>>>>> development.sphinx.conf
> >>>>>> Sphinx 0.9.8.1-release (r1533)
> >>>>>> Copyright (c) 2001-2008, Andrew Aksyonoff
>
> >>>>>> using config file '/Users/Oliver/git/greyville/config/
> >>>>>> development.sphinx.conf'...
> >>>>>> ERROR: section 'order_core_0' (type='source') already exists in /
> >>>>>> Users/
> >>>>>> Oliver/git/greyville/config/development.sphinx.conf line 75 col
> >>>>>> 1.
> >>>>>> ===
>
> >>>>>> Kind regards, Oliver.
>
> >>>>>> On 28 Nov, 11:40, Pat Allan <[email protected]> wrote:
> >>>>>>> Hi Oliver
>
> >>>>>>> Can you give the latest release (1.3.7) a shot? It should fix
> >>>>>>> this
> >>>>>>> problem.
>
> >>>>>>> --
> >>>>>>> Pat
>
> >>>>>>> On 28/11/2009, at 8:31 PM, karmacoma wrote:
>
> >>>>>>>> Hi Pat,
>
> >>>>>>>> I am using rails version 2.3.4.
>
> >>>>>>>> Starting a debugger just before: thinking-sphinx/lib/
> >>>>>>>> thinking_sphinx/
> >>>>>>>> active_record.rb:83
> >>>>>>>> I can see the list of indexed models being gathered as script/
> >>>>>>>> server
> >>>>>>>> boots up.
>
> >>>>>>>> Then if I place a breakpoint just before: vendor/plugins/
> >>>>>>>> thinking-
> >>>>>>>> sphinx/lib/thinking_sphinx.rb:63
> >>>>>>>> Upon hitting the first request, Thread.current
> >>>>>>>> [:thinking_sphinx_indexed_models] returns nil.
>
> >>>>>>>> I am using the following version of ruby in development:
> >>>>>>>> - ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin10]
>
> >>>>>>>> And in production:
> >>>>>>>> - ruby 1.8.6 (2007-09-24 patchlevel 111) [i486-linux]
>
> >>>>>>>> Hope this helps...
>
> >>>>>>>> Kind regards, Oliver Beddows.
>
> >>>>>>>> On 28 Nov, 02:05, Pat Allan <[email protected]> wrote:
> >>>>>>>>> Hi Oliver
>
> >>>>>>>>> I'm kinda surprised by this - I thought that array was being
> >>>>>>>>> populated
> >>>>>>>>> at the beginning of each web request in the dev environment,
> >>>>>>>>> but
> >>>>>>>>> just
> >>>>>>>>> so I can track it down... what version of Rails are you using?
>
> >>>>>>>>> --
> >>>>>>>>> Pat
>
> >>>>>>>>> On 28/11/2009, at 4:21 AM, karmacoma wrote:
>
> >>>>>>>>>> Hi,
> >>>>>>>>>> Using the latest version of thinking-sphinx (1.3.6). I am
> >>>>>>>>>> getting
> >>>>>>>>>> the
> >>>>>>>>>> following error: "undefined method `name' for nil:NilClass"
> >>>>>>>>>> when
> >>>>>>>>>> destroying a record.
>
> >>>>>>>>>> The stack trace leads me to the following file: thinking-
> >>>>>>>>>> sphinx/
> >>>>>>>>>> lib/
> >>>>>>>>>> thinking_sphinx/active_record.rb:229
>
> >>>>>>>>>> def eldest_indexed_ancestor
> >>>>>>>>>> ancestors.reverse.detect { |ancestor|
> >>>>>>>>>> ThinkingSphinx.indexed_models.include?(ancestor.name)
> >>>>>>>>>> }.name
> >>>>>>>>>> end
>
> >>>>>>>>>> When the destroy method is called,
> >>>>>>>>>> "ThinkingSphinx.indexed_models"
> >>>>>>>>>> returns an empty array.
>
> >>>>>>>>>> However, according to my application it should be returning:
> >>>>>>>>>> ["Administrator", "Article", "Customer", "Order", "Product",
> >>>>>>>>>> "Representative"].
>
> >>>>>>>>>> * Within production it raises the exception every time
> >>>>>>>>>> (obviously,
> >>>>>>>>>> as
> >>>>>>>>>> the classes are cached).
> >>>>>>>>>> * Within development it raises this exception on the first
> >>>>>>>>>> invocation,
> >>>>>>>>>> but works on the second attempt, and subsequent attempts.
>
> >>>>>>>>>> This seems to be an issue related to lazy loading?
>
> >>>>>>>>>> In my application I often have to delete records. So I am
> >>>>>>>>>> hoping
> >>>>>>>>>> someone can help me fix this problem.
>
> >>>>>>>>>> Kind regards, Oliver Beddows.
>
> >>>>>>>>>> --
>
> >>>>>>>>>> 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
> >>>>>>>>>> athttp://groups.google.com/group/thinking-sphinx?hl=en
> >>>>>>>>>> .
>
> >>>>>>>> --
>
> >>>>>>>> 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
> >>>>>>>> athttp://groups.google.com/group/thinking-sphinx?hl=en
> >>>>>>>> .
>
> >>>>>> --
>
> >>>>>> 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
>
> ...
>
> 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.