Thinking_Sphinx在控制台中工作,但在Rails应用程序中没有

时间:2011-03-15 21:00:21

标签: ruby-on-rails-3 full-text-search sphinx thinking-sphinx

环境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&GT;   BlogPost.search( “视频”)

我获得了预期的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'

我在shared / db / sphinx文件夹中看到了索引。它出现在我运行ts:index之后。 searchd.pid文件位于日志文件夹中,PID与searchd守护程序匹配。 bin_path是正确的,我已将它添加到.bash_profile文件中的路径。

有没有人有任何想法可能导致这个?

- 更新 -

看起来这不起作用的原因是通过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 :(得分:0)

问题在于思维狮身人面像的路径。我希望你在乘客上运行。请在sphinx.yml中指定路径(你的sphinx配置yml文件是什么)