2017-01-02 1 views
0

данной схемы:Добавление атрибутов к размышлению сфинкса индекс конфигурации вызывает индексацию сбой

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 

индексы/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 

Когда я rake ts:regenerate без has status, :type => :string линии, он генерирует индекс просто отлично.

Но когда я добавляю эту линию, я получаю экранные сообщения об ошибках, из которых наиболее актуально, кажется,

/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/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) 

далее безвозмездное information-- Это показывает различные вещи, которые я пробовал , все из которых были не с той же ошибкой: unknown column

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 

в *_as_string методы являются просто выстрел в темноту:

модели/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

Тим, я не вижу ничего явно неправильного. Можете ли вы предоставить общий вывод ошибок? – pat

+0

обновлен. спасибо, что посмотрели. –

+0

FWIW, я ничего не видел об аксессуарах для атрибутов, но я добавил «attr_accessor: status» в модель без изменений. –

ответ

0

Цените все дополнительные детали Тим.

Я думаю, что проблема здесь связана с ошибкой в ​​Thinking Sphinx, которая приводит к тому, что индексные файлы не очищаются должным образом ts:regenerate и, следовательно, они все еще используют старую схему (без атрибута status). Это означает, что любые попытки заселения новых данных ударят по этой ошибке.

Однако я исправил эту ошибку некоторое время назад, и в нее входит версия Thinking Sphinx версии v3.3.0. Можете ли вы обновить (есть no breaking changes) и посмотреть, устраняет ли это проблему?

+0

До сих пор так хорошо :) Думал, что я потерял рассудок. Надеюсь, это может решить проблему, с которой я столкнулся с sphinx_scope. –

+0

Это также фиксировало проблемы, которые у меня были с областями. Спасибо! –

Смежные вопросы