3

Я пытаюсь добавить камень Searchkick в мое приложение с Ruby on Rails, но когда я ввожу слово в поле поиска i получить эту ошибку в моем приложении. Я установил elasticsearch и последнюю версию java по мере необходимости, но все же ошибка такая же. Это ошибка, я получаю:Faraday :: ConnectionFailed, Connection failed - connect (2) для порта «localhost» 9200 Ошибка Ruby on Rails

Фарадей :: ConnectionFailed в PostsController # поиск

Соединение отклонено - подключение (2) для порта "локальный" 9200

Вот мой код:

Терминал показывает, что установлена ​​упругая поиска:

Терминал

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 

модель/post.rb

class Post < ActiveRecord::Base 
    searchkick 
end 

просмотров/запись/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 %> 

просмотров/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> 

конфигурации/routes.rb

Rails.application.routes.draw do 
    resources :posts do 
    collection do 
    get 'search' 
    end 
end 
end 

Это экран я получаю с ошибкой, показанной:

enter image description here

ответ

3
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 

Это должно исправить вас r проблема.

Смежные вопросы