Thinking_Sphinx работает в консоли, но не в приложении Rails - PullRequest
0 голосов
/ 16 марта 2011

Environment Rails 3.0.4, Ruby 1.8.7, Sphinx 0.99, Dreamhost VPS

У меня есть простой поиск по блогам, настроенный следующим образом:

Контроллер:

def blog_search_results     
    @blog_search_results = BlogPost.search( params[:search_param] )
    respond_to do |format| 
      format.html { render :partial => 'blog_search_results', :layout=>false }
      format.xml  { render :xml     => @blog_search_results }
    end     
end

Просмотр:

<% if !@blog_search_results.empty? %>
    <div id="main_content">
        <table id="pending_blog_list"><tr id="header"><td>Blog Title</td><td>Created by</td><td>Created on</td></tr>
        <% @blog_search_results.each do |blog_post| %>
            <tr>
                <td><%= link_to blog_post.title, blog_named_link(blog_post, :show) %></td>
                <td><%= blog_post.posted_by.display_name -%></td>
                <td><%= blog_post.created_at.strftime("%x") -%></td>
            </tr>
        <% end %>
        </table>
        <%= will_paginate(@blog_search_results, {:form_name => :blog_show_params, :param_name => :page} ) %>
    </div>
<% else %>
    <h2>No blog posts that match your search were found</h2>
<% end %>

Все отлично работает в моей среде разработки.В производственной среде при запуске консоли («rails c production») введите:

irb (основной): 003: 0> BlogPost.search («video»)

Я получаю ожидаемые 4 результата постов со словом «видео».Однако в реальном приложении контроллер продолжает возвращать '404 Not Found'

Started GET "/blog_posts/blog_search_results?search_param=video" 
Processing by BlogPostsController#blog_search_resul as HTML   
Parameters: {"search_param"=>"video"} 
Completed in 27ms 
Rendered layouts/application.html.erb (22.3ms)
Rendered public/404.html within layouts/blog_posts (24.7ms)

Моя настройка sphinx.yml выглядит следующим образом:

staging:
  pid_file: '/www.assetcorr.com/current/log/searchd.pid'
  searchd_file_path: 'www.assetcorr.com/shared/db/sphinx'
  bin_path: '/home/avitus/local/bin'

Я вижу индекс вобщая папка / db / sphinx.Появляется после запуска ts: index.Файл searchd.pid находится в папке журнала, а PID соответствует демону searchd.Bin_path верен, и я добавил его в путь в файле .bash_profile.

У кого-нибудь есть идеи, что может быть причиной этого?

- UPDATE -

Похоже, причина того, что это не работает, заключается в том, что доступ к методу контроллера осуществляется через вызов AJAX:

$(document).ready(function() {
  $("#search_param").observe_field(0.5, function( ) { 
    $.get("/blog_posts/blog_search_results", { search_param: this.value },
      function(data){   
    $("#search_results").html(data);
      }, "html");
    });
  });
});

Когда я удаляю вызов AJAX и прибегаю к простому ванильному GET-запросутогда это работает отлично.Я понятия не имею, почему это будет.

1 Ответ

0 голосов
/ 16 марта 2011

Проблема в пути Думающего Сфинкса.Я надеюсь, что вы работаете на пассажира.пожалуйста, укажите путь в sphinx.yml (что такое ваш файл конфигурации sphinx yml)

...