Hi Pat,

Excellent! Many thanks for sorting this out :o)
I really appreciate it...

Regards, Oliver.

On 1 Dec, 01:49, Pat Allan <[email protected]> wrote:
> Figured it out!
>
> If anyone cares about the internals... the observer changed the load  
> procedure with cached classes, looking at Order first, instead of  
> loading all models... so Thinking Sphinx was presuming that all  
> classes had been loaded, and so it loops through the known indexed  
> models.
>
> So, at this point, because of the observer, that array was ["Order"],  
> instead of ["Company", "Order"] (enforced alphabetical order - this is  
> key). When Order is processed, suddenly Rails then knows about Company  
> because of the associations, and so the array becomes ["Company",  
> "Order"]. So the loop runs through again with the second item - which  
> is Order, again!
>
> Just pushed a patch that fixes this - now Thinking Sphinx will  
> *always* try to load all models, even if classes are cached. If they  
> are, nothing happens. If they're not, or if observers are getting in  
> the way, then we ensure that all indexed models are in that array from  
> the start.
>
> So, installing TS again as a plugin should fix this issue... gem bump  
> will happen later today.
>
> --
> Pat
>
> On 01/12/2009, at 12:22 PM, Pat Allan wrote:
>
> > Right, now I can reproduce it too - thanks for that process, it's
> > definitely activating the observer that causes the problem. I'll see
> > if I can figure out the source today.
>
> > Cheers
>
> > --
> > Pat
>
> > On 01/12/2009, at 3:45 AM, karmacoma wrote:
>
> >> 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
>
> ...
>
> 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.


Reply via email to