Faraday::ConnectionFailed, Connection denied - connect(2) for “localhost” port 9200 Error Ruby on Ra
Posted
技术标签:
【中文标题】Faraday::ConnectionFailed, Connection denied - connect(2) for “localhost” port 9200 Error Ruby on Rails【英文标题】:Faraday::ConnectionFailed, Connection refused - connect(2) for “localhost” port 9200 Error Ruby on Rails 【发布时间】:2016-01-27 07:14:16 【问题描述】:我正在尝试使用 Ruby on Rails 在我的应用程序中添加 Searchkick gem,但是当我在搜索框中输入单词时,我的应用程序中出现此错误。我已经根据需要安装了elasticsearch和最新版本的java,但错误仍然是一样的。这是我得到的错误:
Faraday::ConnectionFailed in PostsController#search
连接被拒绝 - “localhost”端口 9200 的连接(2)
这是我的代码:
终端显示安装了弹性搜索:
终端
Warning: elasticsearch-1.7.3 already installed
posts_controller.rb
class PostsController < ApplicationController
before_action :set_post, only: [:show, :edit, :update, :destroy]
def search
if params[:search].present?
@posts = Post.search(params[:search])
else
@posts = Post.all
end
end
# GET /posts
# GET /posts.json
def index
@posts = Post.all
end
# GET /posts/1
# GET /posts/1.json
def show
end
# GET /posts/new
def new
@post = Post.new
end
# GET /posts/1/edit
def edit
end
# POST /posts
# POST /posts.json
def create
@post = Post.new(post_params)
respond_to do |format|
if @post.save
format.html redirect_to @post, notice: 'Post was successfully created.'
format.json render :show, status: :created, location: @post
else
format.html render :new
format.json render json: @post.errors, status: :unprocessable_entity
end
end
end
# PATCH/PUT /posts/1
# PATCH/PUT /posts/1.json
def update
respond_to do |format|
if @post.update(post_params)
format.html redirect_to @post, notice: 'Post was successfully updated.'
format.json render :show, status: :ok, location: @post
else
format.html render :edit
format.json render json: @post.errors, status: :unprocessable_entity
end
end
end
# DELETE /posts/1
# DELETE /posts/1.json
def destroy
@post.destroy
respond_to do |format|
format.html redirect_to posts_url, notice: 'Post was successfully destroyed.'
format.json head :no_content
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_post
@post = Post.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def post_params
params.require(:post).permit(:name)
end
end
model/post.rb
class Post < ActiveRecord::Base
searchkick
end
views/post/index.html.erb
<p id="notice"><%= notice %></p>
<%= form_tag search_posts_path, method: :get, class: "navbar-form navbar-right", role: "search" do %>
<p>
<%= text_field_tag :search, params[:search], class: "form-control" %>
<%= submit_tag "Search", name: nil, class: "btn btn-default" %>
</p>
<% end %>
<h1>Listing Posts</h1>
<table>
<thead>
<tr>
<th>Name</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @posts.each do |post| %>
<tr>
<td><%= post.name %></td>
<td><%= link_to 'Show', post %></td>
<td><%= link_to 'Edit', edit_post_path(post) %></td>
<td><%= link_to 'Destroy', post, method: :delete, data: confirm: 'Are you sure?' %></td>
</tr>
<% end %>
</tbody>
</table>
<br>
<%= link_to 'New Post', new_post_path %>
views/search.html.erb
<table>
<thead>
<tr>
<th>Search Result</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @posts.each do |post| %>
<tr>
<td><%= post.name %></td>
<td><%= link_to 'Show', post %></td>
<td><%= link_to 'Edit', edit_post_path(post) %></td>
<td><%= link_to 'Destroy', post, method: :delete, data: confirm: 'Are you sure?' %></td>
</tr>
<% end %>
</tbody>
</table>
config/routes.rb
Rails.application.routes.draw do
resources :posts do
collection do
get 'search'
end
end
end
这是显示错误的屏幕:
【问题讨论】:
【参考方案1】:Connection refused - connect(2) for "localhost" port 9200
您的弹性搜索服务似乎没有运行。您必须确保它正在运行。
要查看您的弹性搜索服务是否正在运行,请运行:
curl localhost:9200
如果它正在运行,那么它应该返回一个像这样的哈希:
"status" : 200,
"name" : "Buzz",
"cluster_name" : "your_cluster_name",
"version" :
"number" : "1.4.5",
"build_hash" : "...",
"build_timestamp" : "2015-04-27T08:06:06Z",
"build_snapshot" : false,
"lucene_version" : "4.10.4"
,
"tagline" : "You Know, for Search"
如果弹性搜索没有运行,这很可能是您的情况,请使用以下命令启动它:
sudo service elasticsearch start
这应该可以解决您的问题。
【讨论】:
sudo service elasticsearch start
给我消息“sudo: service: command not found”
@Dan 如果您使用的是 Mac,那么您应该尝试使用 brew services start elasticsearch
以上是关于Faraday::ConnectionFailed, Connection denied - connect(2) for “localhost” port 9200 Error Ruby on Ra的主要内容,如果未能解决你的问题,请参考以下文章
Faraday::ConnectionFailed, Connection denied - connect(2) for “localhost” port 9200 Error Ruby on Ra