2017-01-02 2 views
0

Gegeben Schema:Hinzufügen Attribut sphinx Index config denken Indizierung verursacht scheitern

create_table "letters", force: :cascade do |t| 
t.string "title",  limit: 255 
t.text  "content", limit: 16777215 
t.date  "issue_date" 
t.datetime "created_at",     null: false 
t.datetime "updated_at",     null: false 
t.integer "osha_id", limit: 4 
t.string "status",  limit: 255 
end 

Indizes/letter_index.rb

ThinkingSphinx::Index.define :letter, :with => :real_time do 
# fields 
indexes title, :sortable => true 
indexes content 
indexes issue_date_as_string 

# attributes 
has status, :type => :string 
has created_at, :type => :timestamp 
has updated_at, :type => :timestamp 
end 

Als ich rake ts:regenerate ohne has status, :type => :string Linie, den Index nur gut erzeugt.

Aber wenn ich diese Zeile in hinzufügen, erhalte ich eine Bildschirm von Fehlermeldungen, von denen die wichtigsten

/home/tim/.rvm/gems/ruby-2.2.1/gems/rake-12.0.0/exe/rake:27:in '<top (required)>' 
Mysql2::Error: unknown column: 'status' 

ich bin absolut verwirrt zu sein scheint, was der Fehler, mir zu sagen versucht und warum es an erster Stelle versagt. Fehle ich etwas Offensichtliches?

[bearbeiten Weitere Informationen hinzufügen]

vollständigen Fehlerausgang (nachdem er den Inhalt der Datenbank-Dumps):

/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/connection.rb:93:in `rescue in query' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/connection.rb:96:in `query' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/connection.rb:73:in `execute' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/real_time/transcriber.rb:21:in `block (2 levels) in copy' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/connection.rb:39:in `block in take' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/innertube-1.1.0/lib/innertube.rb:138:in `take' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/connection.rb:37:in `take' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/real_time/transcriber.rb:20:in `block in copy' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.4/lib/active_support/notifications.rb:164:in `block in instrument' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.4/lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.4/lib/active_support/notifications.rb:164:in `instrument' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/logger.rb:3:in `log' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/real_time/transcriber.rb:19:in `copy' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/real_time/populator.rb:16:in `block in populate' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.4/lib/active_record/relation/batches.rb:124:in `find_in_batches' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.4/lib/active_record/querying.rb:9:in `find_in_batches' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/real_time/populator.rb:15:in `populate' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/real_time/populator.rb:3:in `populate' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/rake_interface.rb:30:in `block in generate' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/rake_interface.rb:29:in `each' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/rake_interface.rb:29:in `generate' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/tasks.rb:28:in `block (2 levels) in <top (required)>' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/rake-12.0.0/exe/rake:27:in `<top (required)>' 
Mysql2::Error: unknown column: 'status' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/mysql2-0.3.21/lib/mysql2/client.rb:80:in `_query' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/mysql2-0.3.21/lib/mysql2/client.rb:80:in `block in query' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/mysql2-0.3.21/lib/mysql2/client.rb:79:in `handle_interrupt' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/mysql2-0.3.21/lib/mysql2/client.rb:79:in `query' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/connection.rb:121:in `results_for' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/connection.rb:88:in `query' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/connection.rb:73:in `execute' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/real_time/transcriber.rb:21:in `block (2 levels) in copy' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/connection.rb:39:in `block in take' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/innertube-1.1.0/lib/innertube.rb:138:in `take' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/connection.rb:37:in `take' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/real_time/transcriber.rb:20:in `block in copy' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.4/lib/active_support/notifications.rb:164:in `block in instrument' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.4/lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.4/lib/active_support/notifications.rb:164:in `instrument' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/logger.rb:3:in `log' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/real_time/transcriber.rb:19:in `copy' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/real_time/populator.rb:16:in `block in populate' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.4/lib/active_record/relation/batches.rb:124:in `find_in_batches' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.4/lib/active_record/querying.rb:9:in `find_in_batches' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/real_time/populator.rb:15:in `populate' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/real_time/populator.rb:3:in `populate' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/rake_interface.rb:30:in `block in generate' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/rake_interface.rb:29:in `each' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/rake_interface.rb:29:in `generate' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/thinking-sphinx-3.2.0/lib/thinking_sphinx/tasks.rb:28:in `block (2 levels) in <top (required)>' 
/home/tim/.rvm/gems/ruby-2.2.1/gems/rake-12.0.0/exe/rake:27:in `<top (required)>' 
Tasks: TOP => ts:regenerate => ts:generate 
(See full trace by running task with --trace) 

weiter unentgeltlichen information-- Das die verschiedene Dinge zeigt, dass ich versucht habe, , von denen alle mit dem gleichen unknown column Fehler fehlgeschlagen:

ThinkingSphinx::Index.define :letter, :with => :real_time do 
    # fields 
    indexes title, :sortable => true 
    indexes content 
    #indexes issue_date 
    indexes issue_date_as_string # this one works! 
    #indexes status 
    #indexes status_as_string 
    #indexes osha_id 
    #indexes issue_date 

    # attributes 
    #has status, :type => :string 
    has created_at, :type => :timestamp 
    has updated_at, :type => :timestamp 
end 

die *_as_string Methoden sind nur ein Schuss im Dunkeln:

models/letter.rb:

# experimental for thinking sphinx indexing on issue date 
def issue_date_as_string 
    self.issue_date.to_s 
end 

def status_as_string 
    self.status.to_s 
end 
+0

Tim, ich kann nichts offensichtlich falsch finden. Können Sie die vollständige Fehlerausgabe teilen? – pat

+0

aktualisiert. danke fürs schauen. –

+0

FWIW, ich habe nichts über attributaccessoren gesehen, aber ich habe 'attr_accessor: status' zum Modell ohne Änderung hinzugefügt –

Antwort

0

das alles extra Detail schätzen Tim.

Ich denke, dass das Problem hier mit einem Fehler in Thinking Sphinx zusammenhängt, der dazu führt, dass Index-Dateien nicht ordnungsgemäß von ts:regenerate gelöscht werden und somit immer noch das alte Schema verwenden (ohne das status Attribut). Dies bedeutet, dass alle Versuche, neue Daten zu füllen, diesen Fehler treffen.

Allerdings habe ich diesen Fehler vor einiger Zeit behoben, und die Version 3.3.0 von Thinking Sphinx enthält es. Können Sie upgraden (gibt es no breaking changes) und sehen, ob das das Problem behebt?

+0

So weit, so gut :) Dachte, ich verlor meine Meinung. Dies könnte das Problem, das ich mit sphinx_scope hatte, auch beheben, hoffe ich. –

+0

Dies behebt auch die Probleme, die ich mit Scopes hatte. Vielen Dank! –

Verwandte Themen