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 >>>>>>>>> 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 > . > > -- 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.
