Search code examples
ruby-on-railsrubyherokuelasticsearchbonsai-elasticsearch

Elasticsearch & Bonsai: IndexMissingException on Heroku, works fine locally


Building my first rails app and having issues getting Elasticsearch to run on Heroku.

Local works perfect.

On Heroku I can open the search page, but when I try to perform a search I get the error below:

Heroku logs show:

2015-05-18T12:05:15.969673+00:00 app[web.1]: ActionView::Template::Error ([404] {"error":"IndexMissingException[[homes] missing]","status":404}):
2015-05-18T12:05:15.969674+00:00 app[web.1]:      9: <% end %>
2015-05-18T12:05:15.969676+00:00 app[web.1]:     10:  
2015-05-18T12:05:15.969677+00:00 app[web.1]:     11: <ul>
2015-05-18T12:05:15.969678+00:00 app[web.1]:     12:   <% @homes.each do |home| %>
2015-05-18T12:05:15.969679+00:00 app[web.1]:     13:     <li>
2015-05-18T12:05:15.969680+00:00 app[web.1]:     14:       <h3>
2015-05-18T12:05:15.969682+00:00 app[web.1]:     15:         <%= link_to home.name, controller: "homes", action: "show", id: home._id%>
2015-05-18T12:05:15.969683+00:00 app[web.1]:   app/views/search/search.html.erb:12:in `_app_views_search_search_html_erb___1261310385184340853_69929402195100'

Gems:

gem 'elasticsearch-model'
gem 'elasticsearch-rails'
gem 'bonsai-elasticsearch-rails', '~> 0.0.4'

Search Controller:

class SearchController < ApplicationController
    def search
      if params[:q].nil?
        @homes = []
      else
        @homes = Home.search params[:q]
      end
    end 
end

Search View:

<h1>Homes Search</h1>

<%= form_for search_path, method: :get do |f| %>
  <p>
    <%= f.label "Search for" %>
    <%= text_field_tag :q, params[:q] %>
    <%= submit_tag "Go", name: nil %>
  </p>
<% end %>

<ul>
  <% @homes.each do |home| %>
    <li>
      <h3>
        <%= link_to home.name, controller: "homes", action: "show", id: home._id%>
      </h3>
    </li>
  <% end %>
</ul>

Any suggestions would be greatly appreciated!


Solution

  • The problem is similar to this issue.

    The solution involves

    1. running the tasks highlighted here
    2. making sure the elasticsearch.rake exists
    3. and finally if the 404 still happens to create the index manually using curl -XPOST http://account.region.bonsai.io/homes