Sphinx not starting up on Heroku

I upgraded my Sphinx gems for my RoR project and I'm getting all sorts of errors. First there was a 'mysql2 gem missing' error, and now I'm getting this one:

/app/vendor/bundle/ruby/1.9.1/gems/flying-sphinx-0.8.5/lib/flying_sphinx/heroku_shared_adapter.rb:1:in `': uninitialized constant ThinkingSphinx::PostgreSQLAdapter (NameError)

Any ideas?

  1. Here are my gems:

    gem 'thinking-sphinx', '3.0.0'
    gem 'flying-sphinx', '0.8.5'

  2. When I try to run configure, I get this error:

    /app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.3/lib/active_record/dynamic_matchers.rb:50:in method_missing': undefined methoddefine_index' for #<Class:0x00000006b8e358> (NoMethodError)

    from /app/app/models/user.rb:69:in `<class:User>'
    from /app/app/models/user.rb:3:in `<top (required)>'
    

    But my User model DOES have a define_index defined.

  3. Hi Shawn

    Upgrading to Thinking Sphinx 3.0 is not a simple matter of just changing gems:
    https://groups.google.com/d/msg/thinking-sphinx/QM0BlS3gg3k/s61pfCBBTUoJ
    https://github.com/pat/thinking-sphinx/blob/master/README.textile

    Index definitions are now in their own files, so that's why you're getting the define_index errors. Also, you'll need to use the latest from the ts3 branch of flying-sphinx:

        gem 'flying-sphinx',
          :git => 'git://github.com/flying-sphinx/flying-sphinx.git',
          :ref => 'f87bbbd519'

    Kind regards,

    Pat Allan

  4. Thanks. I started migrating over to the new index files, but now I'm getting this error after switching to your recommended flying sphinx version:

    /app/vendor/bundle/ruby/1.9.1/gems/bundler-1.3.0.pre.5/lib/bundler/runtime.rb:31:in `block in setup': You have already activated flying-sphinx 0.8.5, but your Gemfile requires flying-sphinx 0.8.4. Using bundle exec may solve this. (Gem::LoadError)

  5. Try adding bundle exec to the `heroku run` commands - e.g.: heroku run bundle exec flying-sphinx configure

  6. I added bundle exec and now I have this error:

    /app/vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:494:in load_missing_constant': Object is not missing constant Rails! (NameError) from /app/vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:192:inblock in const_missing' from /app/vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:190:in each' from /app/vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:190:inconst_missing' from /app/app/indices/project_index.rb:11:in `block in '

    My project_index.rb looks like this:

    ThinkingSphinx::Index.define :user, :with => :active_record, :delta => true do

    # fields indexes title, :sortable => true indexes description indexes taggings.tag.name, :as => :tags

    # attributes has created_at, updated_at

    if Rails.env.production? || Rails.env.staging? set_property :delta => FlyingSphinx::DelayedDelta end end

    What about the Rails constant is wrong?

  7. Try changing the Rails references in your index definition to ::Rails instead.

  8. I went and just removed those lines from the index definitions, but now I'm getting this error:

    /app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.3/lib/active_record/associations/join_dependency/join_association.rb:34:in initialize': undefined methodcheck_validity!' for nil:NilClass (NoMethodError) from /app/vendor/bundle/ruby/1.9.1/gems/polyamorous-0.5.0/lib/polyamorous/join_association.rb:24:in initialize_with_polymorphism' from /app/vendor/bundle/ruby/1.9.1/gems/thinking-sphinx-3.0.0/lib/thinking_sphinx/active_record/associations.rb:43:innew'

  9. Is either the taggings or tag association polymorphic? I'm not familiar with the polyamorous gem, so I don't know how it could impact this setup.

  10. It was definitely working before the upgrade.

  11. Yup, but polymorphic support has changed a bit with TS v3. It now doesn't make potentially slow queries on your database to determine which models are available through a polymorphic association, but because of that, you need to specify which models should be considered with a polymorphic association:

        indexes posts.source.name, :as => :source_name

        polymorphs posts.source, :to => %w( User Project )

    Also, you'll need to be running the latest from GitHub - the required commits weren't part of 3.0.0:

        gem 'thinking-sphinx',
          :git => 'git://github.com/pat/thinking-sphinx.git',
          :ref => '85336fc822'

    Cheers

    Pat

  12. I think I got over the hump, but now I'm getting an error when I perform the search:

    2013-01-24T02:22:19+00:00 app[web.3]: NoMethodError (undefined method 'stringify_keys!' for test 2013-01-24T02:22:19+00:00 app[web.3]: app/controllers/search_controller.rb:5:in `search'

    The line of code that the error is referring to is this:

     project_results = Project.search params[:query], :include => :user, :star => true, :sort_mode => :extended, :order => "@relevance DESC, title DESC"
    
  13. Hi Shawn

    Good to hear progress is being made. What's the full stack of this new error?

  14. That's it. Just those two lines.

  15. Hmm. What's the full contents of that method in your controller?

  16. That's the first line of the method:

      def search
        project_results = Project.search params[:query], :include => :user, :star => true, :sort_mode => :extended, :order => "@relevance DESC, title DESC"
        user_results = User.search params[:query], :star => true, :sort_mode => :extended, :order => "@relevance DESC, username DESC"
        ...

  17. And the call to the method looks like this:

    2013-01-24T03:33:27+00:00 app[web.1]: Started GET "/search/search.json?query=josh" for 166.147.83.163 at 2013-01-24 03:33:27 +0000
    2013-01-24T03:33:27+00:00 app[web.1]: Processing by SearchController#search as JSON
    2013-01-24T03:33:27+00:00 app[web.1]: Parameters: {"query"=>"josh"}

  18. I'm at a loss to where this error's coming from - there's no calls to stringify_keys! in the Thinking Sphinx source. Does it work locally? I'm hoping there's a deeper stack trace available somewhere.

  19. I still don't know what's going on. Now I'm getting this:

    undefined method `search=' for #MetaSearch::Searches::Project:0x007fa5ac702ea8

    My indices/project_index.rb looks like:

    ThinkingSphinx::Index.define :project, :with => :active_record, :delta => true do

    # fields indexes title, :sortable => true indexes description indexes taggings.tag.name, :as => :tags

    # attributes has created_at, updated_at end

  20. Do you guys have a full working example you can post for the v3.0.0 release? There is nothing anywhere as far as I can see.

  21. I'm not sure if MetaSearch is getting in the way... do you have a full stack trace of that error?

    At this point, there's no sample apps with TS v3 that I can point to - though to be honest, if you've got MetaSearch and Thinking Sphinx in the same app, you're not dealing with a standard setup.

  22. The method to call search is different in 3.0.0. It used to be Project.search, but now it's ThinkingSphinx.search. That solved one issue, but now I'm getting a MySQL error on Heroku:

    2013-01-31T22:33:14+00:00 app[web.4]: Sphinx Query (23.7ms) SELECT * FROM project_core, project_delta, user_core, user_delta WHERE sphinx_deleted = 0 LIMIT 0, 20
    2013-01-31T22:33:14+00:00 app[web.4]: Completed 500 Internal Server Error in 260ms
    2013-01-31T22:33:14+00:00 app[web.4]:
    2013-01-31T22:33:14+00:00 app[web.4]: Mysql2::Error (Lost connection to MySQL server at 'reading authorization packet', system error: 0):
    2013-01-31T22:33:14+00:00 app[web.4]: app/controllers/search_controller.rb:13:in `search'

  23. Well, that's progress. Is this error still persisting? And what's your app's name? I'll have a look at the appropriate Sphinx server...

  24. My app on heroku is at young-galaxy-1140, and it looks like my Sphinx server is rotterdam.

    -S

  25. Have you run either `heroku run bundle exec flying-sphinx rebuild` or `heroku run rake fs:rebuild` since switching gem versions? The sphinx configuration file on the server looks like it was generated with an older version of Thinking Sphinx.

  26. OK, I ran it and now I'm getting this error:

    2013-01-31T23:32:34+00:00 app[web.3]: Sphinx Query (25.1ms) SELECT * FROM `project_core`, `project_delta` WHERE MATCH('test @sphinx_internal_class_name (Project)') AND sphinx_deleted = 0 ORDER BY @relevance DESC, title DESC LIMIT 0, 20
    2013-01-31T23:32:34+00:00 app[web.3]: Completed 500 Internal Server Error in 199ms
    2013-01-31T23:32:34+00:00 app[web.3]:
    2013-01-31T23:32:34+00:00 app[web.3]: Mysql2::Error (sphinxql: syntax error, unexpected USERVAR, expecting IDENT (or 5 other tokens) near '@relevance DESC, title DESC LIMIT 0, 20; SHOW META'):
    2013-01-31T23:32:34+00:00 app[web.3]: app/controllers/search_controller.rb:11:in `search'

  27. Right, so for some reason Sphinx decided to no longer support @relevance in SphinxQL queries - but @weight is fine and means the same thing, so just use that instead.

Reply to this discussion Internal reply only staff will see it

Markdown

Attaching KB article:

» »

Read more…

Attach files

Up to 10MB each.

If you don't have an account yet, we need to confirm you're human and not a machine trying to post spam.

Keyboard shortcuts

Generic

? Show this help
ESC Blurs the current field

Comment Form

r Focus the comment reply box
^ + ↩ Submit the comment

You can use Command ⌘ instead of Control ^ on Mac

Recent Discussions