3

sunspot_rails で検索するために、データベースのインデックスを作成できません。次のエラーが表示されます。

sunspot:reindex rake の実行が中止されました! 未定義のローカル変数またはメソッド 'counter'

rake sunspot:reindex を実行すると、次の出力が得られます。私はRailsの初心者です。プロジェクトに sunspot_rails を追加して、検索機能を追加したいと考えています (Heroku でプロジェクトをデプロイすることを期待しています)。

Rails 3 を使用しています。こちらの指示に従いました: https://github.com/outoftime/sunspot/blob/master/sunspot_rails/README.rdoc。問題を診断するための他のさまざまな試みには、次のものが含まれます。

  • sunspot_rails に加えて sunspot をインストールします。
  • 私はsunspot_rails v. 1.2.0と1.2.1になってしまったので、sunspot_rails 1.2.0を持っているので1.2.1をアンインストールしました。
  • 私が理解しているnokogiri gemをインストールしたのは、sunspot_railsの依存関係です。
  • ここの指示に従って libxml2 を個別にインストールし、nokogiri をインストールします: http://www.engineyard.com/blog/2010/getting-started-with-nokogiri/

    ** sunspot:reindex を呼び出します (first_time) ** 環境を呼び出します (first_time) ** 環境を実行します ** sunspot:reindex を実行します rake aborted! 未定義のローカル変数またはメソッドcounter' for [removed pound]<Class:0x10359aef8> /Library/Ruby/Gems/1.8/gems/activerecord-3.0.3/lib/active_record/base.rb:1008:inmethod_missing' /Library/Ruby/Gems/1.8/gems/sunspot_rails-1.2.0/lib/sunspot/rails/searchable.rb:235:in find_in_batches' solr_index' /Library/Ruby/Gems/1.8/gems/activerecord-3.0.3/lib/active_record/relation/batches.rb:71:in/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:infind_in_batches ' solr_index' /Library/Ruby/Gems/1.8/gems/sunspot_rails-1.2.0/lib/sunspot/rails/searchable.rb:184:in/Library/Ruby/Gems/1.8/gems/sunspot_rails-1.2.0/lib/sunspot/rails/searchable.rb:234:solr_reindex ' /ライブラリ/Ruby/Gems/1.8/gems/sunspot_rails-1.2.0/lib/sunspot/rails/tasks.rb:57 /ライブラリ/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:incall' /Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:inexecute' /Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:ineach' execute' /Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:597:in/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:631: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:ininvoke_with_call_chain' /Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:583:in invoke_task' invoke' /Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2051:in/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:ineach' /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:instandard_exception_handling' /Library/Ruby /Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2023:top_level' /Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2001:in実行中' /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:inrun' /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

どんな助けでも大歓迎です!

4

3 に答える 3

2

エラーは、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 ブロックの最後でそれを増やします。そして、この変数はベンチマークに使用されています。心配しないで〜

于 2011-02-17T16:51:45.823 に答える
1

注を追加するために、これは Sunspot 1.2.1 で修正されました。

于 2011-03-04T17:20:22.960 に答える
0

これは非常にタイムリーな介入です、user34。

Ubuntu 10.4 から実行されている Rails 3.0.1 用の Sunspot をインストールするだけです。インデックスの再作成で最初に接続の問題に遭遇した後 (Ubuntu ユーザーは、Javascript が実行されていることを確認する必要があるようです - sudo apt-get install default-jdk のようです)、次に「カウンター」で Walter と同じ問題に遭遇しました。

これは新しい黒点の問題ですか?

とにかく、あなたは私がそれを必要とするほんの数時間前にあなたの返信を投稿しました..そして私が見る限り、私は今行くことができるようです.

お二人に感謝します..(そして、5分間のインストールの主張には常に注意してください:))

于 2011-02-17T19:11:05.003 に答える