在我的本地计算机上,我使用elasticsearch
,ruby
,sinatra
和stretcher
gem。
我收到以下错误:
faraday.rb:99:in `method_missing': undefined method `load_autoloaded_constants' for #<Faraday::Connection:0x9b9f218> (NoMethodError)
截断的ruby代码是:
require 'sinatra'
require 'stretcher'
configure do
ES = Stretcher::Server.new('http://localhost:9200')
end
class Products
def self.match(text)
ES.index(:products).search size: 1000, query: {
multi_match: { query: text, fields: [:title, :description] }
}
end
end
get "/" do
erb :index
end
get "/:search" do
erb :result, locals: { products: Products.match(params[:search]) }
end
post "/" do
unless ES.index(:products).exists?
# create index if not exists
ES.index(:products).create(mappings: {
product: {
properties: {
title: {type: :string},
price: {type: :integer},
description: {type: :string}
}
}
})
end
感谢所有的帮助。
当我安装担架时,它会默认安装faraday_middleware-multi_json 0.0.6和faraday 0.9.0以及faraday_middleware 0.9.1。
答案 0 :(得分:2)
我认为我们很多人都面临这个问题,但我没有找到一个可以得到适当指示的地方。
解决“法拉第方法缺失:load_autoloaded_constants ”错误的步骤
1。转到命令行并打开gems文件夹下的担架文件夹
sudo subl /home/abhinay/.rvm/gems/ruby-2.1.1/gems/stretcher-1.21.1/
2. 打开 lib / stretcher.rb
添加以下行: require 'multi_json'
#line 5
删除这些行:
require 'faraday_middleware/multi_json'
#line 7
Faraday.load_autoloaded_constants # line 8
3. 打开 lib / stretcher / server.rb
更改
builder.response :multi_json, :content_type => /\bjson$/ #line 9
以强>
builder.response :json, :content_type => /\bjson$/
和
builder.request :multi_json
到
builder.request :json
#line 11
4. 打开 spec / lib / stretcher_index_spec.rb 更改 #line 44
block.call.should == %{curl -XPUT 'http://localhost:9200/foo' -d '#{MultiJson.dump(options)}' '-H Accept: application/json' '-H Content-Type: application/json' '-H User-Agent: Stretcher Ruby Gem #{Stretcher::VERSION}'}
以强>
block.call.should == %{curl -XPUT 'http://localhost:9200/foo' -d '#{JSON.dump(options)}' '-H Accept: application/json' '-H Content-Type: application/json' '-H User-Agent: Stretcher Ruby Gem #{Stretcher::VERSION}'}
5. 打开 stretcher.gemspec 更改#line 30
gem.add_dependency('faraday_middleware', '~> 0.9.0')
以强>
gem.add_dependency('faraday_middleware', '~> 0.9')
并删除这些行#line 33&amp; 34 强>
gem.add_dependency('multi_json', '>= 1.0')
gem.add_dependency('faraday_middleware-multi_json', "~> 0.0.5")
答案 1 :(得分:1)
我相信这是一个已知的担架问题。请参阅https://github.com/PoseBiz/stretcher/pull/85
选项:
1)使用法拉第的先前版本,例如Gemfile
with:
gem 'faraday', '0.8.9'
2)镜像更改以解决已知的Stretcher问题85。
答案 2 :(得分:0)