3 Stimmen

Sunspot_Rails Rake bricht beim Ausführen von Reindex ab

Ich bin nicht in der Lage, meine Datenbank für die Suche mit sunspot_rails zu indizieren. Ich erhalte die folgende Fehlermeldung:

Ausführen von sunspot:reindex rake abgebrochen! undefinierte lokale Variable oder Methode 'zähler'

Ich erhalte die folgende Ausgabe, nachdem ich rake sunspot:reindex ausgeführt habe. Ich bin ein Anfänger in Rails. Ich möchte sunspot_rails zu meinem Projekt hinzufügen, um Suchfunktionen hinzuzufügen (mit der Hoffnung, das Projekt mit Heroku bereitzustellen).

Ich verwende Rails 3. Ich habe die Anweisungen hier befolgt: https://github.com/outoftime/sunspot/blob/master/sunspot_rails/README.rdoc . Zu meinen verschiedenen anderen Versuchen, das Problem zu diagnostizieren, gehörten:

  • die Installation von sunspot zusätzlich zu sunspot_rails.
  • Ich endete mit sunspot_rails v. 1.2.0 und 1.2.1, also habe ich 1.2.1 deinstalliert, weil ich sunspot_rails 1.2.0 habe.
  • das nokogiri-Gem installiert, das meines Wissens eine Abhängigkeit für sunspot_rails ist.
  • installierte libxml2 separat, indem ich den Anweisungen hier folgte, um nokogiri zu installieren: http://www.engineyard.com/blog/2010/getting-started-with-nokogiri/

    ** Aufruf von sunspot:reindex (first_time) ** Aufruf von environment (first_time) ** Ausführen von environment ** Ausführen von sunspot:reindex rake abgebrochen! undefinierte lokale Variable oder Methode 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:in __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:in 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:in execute' /Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in each' /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 each' /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: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

Das ist das, was ich in der Klasse habe, das ich gerne durchsuchen würde:

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

Für jede Hilfe wären wir Ihnen dankbar!

2voto

QJGui Punkte 889

Der Fehler liegt im sunspot_rails-1.2.0/lib/sunspot/rails/searchable.rb:235 Code. Sie sollten ihn selbst beheben.

Und es ist sehr einfach, sie zu reparieren:

    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

Fügen Sie eine Zählervariable vor find_in_batches ein, und erhöhen Sie sie am Ende des find_in_batches-Blocks. Und diese Variable wird für den Benchmark verwendet. Keine Sorge~

1voto

Kris Nuttycombe Punkte 4530

Nur um eine Anmerkung hinzuzufügen: Dieses Problem ist jetzt in Sunspot 1.2.1 behoben.

0voto

Alan Miles Punkte 1

Das ist ein rechtzeitiges Eingreifen, User34.

Ich installiere gerade Sunspot for Rails 3.0.1 unter Ubuntu 10.4. Nach dem ersten stolperte auf Verbindungsprobleme mit reindexing (Ubuntu-Benutzer müssen sicher sein, dass sie Javascript laufen haben, scheint es - sudo apt-get install default-jdk), lief ich dann in das gleiche Problem wie Walter mit "Zähler".

Ich frage mich, ob dies eine neue Sunspot-Ausgabe ist?

Jedenfalls haben Sie Ihre Antwort ein paar Stunden, bevor ich sie brauchte, gepostet und soweit ich sehen kann, bin ich jetzt startklar.

Vielen Dank an Sie beide (und seien Sie IMMER vorsichtig mit Behauptungen über eine 5-Minuten-Installation :) )

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X