루비 지오 코더 문서 (rubygeocoder.com)에 따르면 Sinatra 앱으로 지오 코더 젬을 사용할 수는 있지만 문제가 발생하여 작동하지 못하고 있습니다. 어떤 실제 예제 또는 관련 stackoverflow 문제를 찾을 수 있습니다. 문제는 그것이 Sinatra 앱이며 전체 레일 앱이 아니라는 사실 때문이라고 생각합니다.Sinatra를 사용하여 루비 지오 코더 구현시 문제점
내 Gemfile :
source "https://rubygems.org"
ruby '2.1.2'
gem 'dotenv', '~> 0.10.0'
gem 'pg', '~> 0.17.1'
gem 'rack-flash3'
gem "sinatra"
gem "activerecord"
gem "sinatra-activerecord"
gem "geocoder"
gem 'omniauth'
gem 'omniauth-google-oauth2'
gem "sqlite3"
gem "shotgun"
I에 의해 검색 할 (위도와 경도 열이 떠있다) 모델 : 여기
class Item < ActiveRecord::Base
extend Geocoder::Model::ActiveRecord
attr_accessor :latitude, :longitude
belongs_to :profile
has_and_belongs_to_many :categories
has_many :reports, dependent: :destroy
}
가 함께 app.rb 코드 년대 '/' 경로 : 여기
class FL < Sinatra::Base
get '/' do
@items = Item.near('Detroit, MI, US')
puts "ITEMS ARE:"
pp @items
erb :index
end
...
end
는 관련 app.rb 내용이다 :
require 'rubygems'
require 'sinatra/base'
require 'sinatra/flash'
require 'sinatra/activerecord'
require 'geocoder'
require 'omniauth'
require 'sinatra/flash'
require 'json'
require 'pp'
require 'rack-flash'
require './models/model_init'
require './helpers/helper'
require './auth'
require './admin'
require './api'
class FL < Sinatra::Base
set :root, File.dirname(__FILE__)
enable :logging
enable :sessions
#set :logging, true
register Sinatra::ActiveRecordExtension
register Sinatra::Flash
set :show_exceptions, true if ENV['RACK_ENV'] == 'development'
use Rack::Session::Cookie, :secret => ENV['RACK_COOKIE_SECRET']
end
마지막으로, 저는 여기에 나타나는 오류입니다 :
NoMethodError - undefined method `near' for #<Class:0x0000010750d0b8>:
/Users/bob/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.0/lib/active_record/dynamic_matchers.rb:26:in `method_missing'
/Users/bob/rails_projects/fl2/api.rb:21:in `block in <class:FL>'
/Users/bob/.rvm/gems/ruby-2.1.2/gems/sinatra-1.4.5/lib/sinatra/base.rb:1603:in `call'
/Users/bob/.rvm/gems/ruby-2.1.2/gems/sinatra-1.4.5/lib/sinatra/base.rb:1603:in `block in compile!'
/Users/bob/.rvm/gems/ruby-2.1.2/gems/sinatra-1.4.5/lib/sinatra/base.rb:966:in `[]'
/Users/bob/.rvm/gems/ruby-2.1.2/gems/sinatra-1.4.5/lib/sinatra/base.rb:966:in `block (3 levels) in route!'
이 스택 트레이스를 보면, 그것은 그 어떤 이유로 지오 코더 패키지를 찾지 못하는 것 같습니다. 만약 내가 누락 된 간단한 구성이라면, 또는 내가 시도하고있는 것이 일부 보석 커스터마이징 (이 시점에서 내 이해를 넘어선) 없이는 가능하지 않다면 나는 확실하지 않다. 모든 통찰력, 시도 할 제안 또는 예를 들어 주시면 감사하겠습니다. 감사!
내 config.ru 추가 :
config.ru
require 'bundler/setup'
Bundler.require(:default)
use Bundler.setup(:default) #added this by suggestion
require 'logger'
use Rack::Deflater
Dotenv.load
require "./fl_app"
run FL
실제로 다음 행이 실행되어 출력을 생성 할 수 있기 때문에로드 지오 코더가 정상적으로 작동하는지 확인할 수있었습니다. @location = Geocoder :: Calculations.extract_coordinates ([42.44, -83.33]), 모델과 관련된 메소드를로드하는 것 (또는 다른 이유로 액세스 할 수 없음) 일뿐입니다. –
Sinatra와 별도로 콘솔이나 스펙에서'Item' 클래스를로드 할 수 있습니까? – iain
Sinatra와 별도로로드하는 방법을 모르겠습니다. 내가 할 수 있어야합니까? 난 레일 애플 리케이션이 아니기 때문에 나는 레일 콘솔을 사용할 수 없다. 그러나 다음과 같이 irb 콘솔에로드 할 수 있습니다. 1. 'sinatra/activerecord'가 필요합니다. 2. './models/item.rb'를로드하십시오. 거기에서 Item.new를 사용하여 새 항목을 인스턴스화 할 수 있습니다. 그 질문에 대한 대답이 확실하지 않습니다. –