Рейндж Sunspot_Rails прерван при выполнении переиндексации - PullRequest
3 голосов
/ 13 февраля 2011

Я не могу проиндексировать свою базу данных для поиска с помощью sunspot_rails. Я получаю следующую ошибку:

Выполнить солнечное пятно: переиндекс рейка прерван! неопределенная локальная переменная или метод 'Счетчик'

Я получаю следующий вывод после запуска rake sunspot: reindex. Я новичок в Rails. Я хочу добавить sunspot_rails в свой проект, чтобы добавить функциональность поиска (с надеждой на развертывание проекта с Heroku).

Я использую Rails 3. Я следовал инструкциям здесь: https://github.com/outoftime/sunspot/blob/master/sunspot_rails/README.rdoc. Мои различные другие попытки диагностировать проблему включали:

  • установка sunspot в дополнение к sunspot_rails.
  • Я закончил с sunspot_rails v. 1.2.0 и 1.2.1, поэтому я удалил 1.2.1, потому что у меня sunspot_rails 1.2.0.
  • установил камень нокогири, который, как я понимаю, является зависимостью от sunspot_rails.
  • установил libxml2 отдельно, следуя приведенным здесь инструкциям для установки nokogiri: http://www.engineyard.com/blog/2010/getting-started-with-nokogiri/

    ** Вызвать солнечное пятно: reindex (first_time) ** Вызвать среду (first_time) ** Выполнить среду ** Выполнение солнечного пятна: переиндексация рейка отменена! неопределенная локальная переменная или метод counter' for [removed pound]<Class:0x10359aef8> /Library/Ruby/Gems/1.8/gems/activerecord-3.0.3/lib/active_record/base.rb:1008:in method_missing '/Library/Ruby/Gems/1.8/gems/sunspot_rails-1.2.0/lib/sunspot/rails/searchable.rb:235:in solr_index' /Library/Ruby/Gems/1.8/gems/activerecord-3.0.3/lib/active_record/relation/batches.rb:71:in find_in_batches' / Library / Ruby / Gems / 1.8 / gems / activerecord-3.0.3 / lib / active_record / base.rb: 440: в __send__' /Library/Ruby/Gems/1.8/gems/activerecord-3.0.3/lib/active_record/base.rb:440:in find_in_batches '/Library/Ruby/Gems/1.8/gems/sunspot_rails-1.2.0/lib/sunspot/rails /searchable.rb:234:in solr_index' /Library/Ruby/Gems/1.8/gems/sunspot_rails-1.2.0/lib/sunspot/rails/searchable.rb:184:in solr_reindex '/Library/Ruby/Gems/1.8/gems/sunspot_rails-1.2.0/lib/sunspot/rails/tasks.rb:57 /Library/Ruby/Gems/1.8/ gems / sunspot_rails-1.2.0 / lib / sunspot / rails / tasks.rb: 56: в each' /Library/Ruby/Gems/1.8/gems/sunspot_rails-1.2.0/lib/sunspot/rails/tasks.rb:56 /Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in call '/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:636 : в execute' /Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in каждый '/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in execute' /Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:597:in invoke_with_call_chain' /System/Library/Frameworks/Ruby.framework/Versions /1.8/usr/lib/ruby/1.8/monitor.rb:242:in synchronize' /Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:590:in invoke_with_call_chain '/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:583:in invoke' /Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2051:in invoke_task '/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in top_level' /Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in каждый' /Library/Ruby/Gems/1.8/gem s / rake-0.8.7 / lib / rake.rb: 2029: в top_level' /Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in standard_exception_handling '/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2023:in top_level' /Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2001:in run '/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in standard_exception_handling' /Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:1998:in run' /Library/Ruby/Gems/1.8/gems/rake-0.8.7 / bin / rake: 31 / usr / bin / rake: 19: in `load '/ usr / bin / rake: 19

Это то, что я имею в классе, я хотел бы найти:

  searchable do
    text :fname
    text :mname
    text :lname, :default_boost => 2   end

Любая помощь будет принята с благодарностью!

Ответы [ 3 ]

2 голосов
/ 17 февраля 2011

Ошибка в коде sunspot_rails-1.2.0 / lib / sunspot / rails / searchable.rb: 235.Вы должны исправить это самостоятельно.

И исправить это очень просто:

    def solr_index(opts={})
      options = {
        :batch_size => 500,
        :batch_commit => true,
        :include => self.sunspot_options[:include],
        :first_id => 0
      }.merge(opts)

      if options[:batch_size]
        counter = 1 #Add the variable
        find_in_batches(:include => options[:include], :batch_size => options[:batch_size]) do |records|
          solr_benchmark options[:batch_size], counter do
            Sunspot.index(records)
          end
          Sunspot.commit if options[:batch_commit]
          counter += 1 # Increase the variable
        end
        Sunspot.commit unless options[:batch_commit]
      else
        Sunspot.index!(all(:include => options[:include]))
      end
    end

Добавьте переменную счетчика в начале find_in_batches и увеличьте ее в конце блока find_in_batches.И эта переменная используется для сравнения.Не волнуйся ~

1 голос
/ 04 марта 2011

Просто добавьте заметку, теперь это исправлено в Sunspot 1.2.1

0 голосов
/ 17 февраля 2011

Это довольно своевременное вмешательство, пользователь34.

Просто установка Sunspot для Rails 3.0.1 из Ubuntu 10.4. После того, как я впервые наткнулся на проблемы с подключением с помощью переиндексации (пользователи Ubuntu должны быть уверены, что у них запущен Javascript, похоже - sudo apt-get install default-jdk), я столкнулся с той же проблемой, что и Уолтер, с 'counter'.

Интересно, это новая проблема с солнечным пятном?

В любом случае, вы отправили свой ответ всего за пару часов до того, как он мне понадобился ... и, насколько я вижу, я выгляжу хорошо, чтобы идти.

Спасибо вам обоим .. (и ВСЕГДА с осторожностью относитесь к 5-минутным заявкам на установку :))

...