环境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请求时,它可以完美地运行。我不知道为什么会这样。
答案 0 :(得分:0)
问题在于思维狮身人面像的路径。我希望你在乘客上运行。请在sphinx.yml中指定路径(你的sphinx配置yml文件是什么)