2

Так что я использую Geocoder, чтобы вытащить координаты широты и долготы на основе адреса, предоставленного пользователем при отправке формы. Я делаю это, чтобы рисовать маркеры с помощью API Карт Google. Это отлично работает в разработке - нулевые проблемы. Однако, когда я нажимаю на производство, широта и долгота не генерируются Geocoder. Я проверил свои журналы производства, и есть нулевые ошибки. Я также проверил, чтобы камень не был установлен для разработки, и я перезапустил единорога и nginx на моей производственной машине. Какие-нибудь идеи относительно того, что может происходить?Geocoder Gem не работает в производственной среде

Вот мой код модели для модели я брикетирование этой задачи -

class Order < ActiveRecord::Base 

    attr_accessible :city, :customer_email, :customer_id, :delivery_date, :delivery_time, :street, :zipcode, :coupon, :total, :name, :items_with_day, :user_id, :shopping_cart_id, :extras, :latitude, :longitude, :location_name, :phone, :suite, :state 

    belongs_to :user 

    validates :name, :presence => true 
    validates :street, :presence => true 
    validates :city, :presence => true 
    validates :zipcode, :presence => true 

    def address 
    [street, city, state, "United States"].compact.join(', ') 
    end 

    geocoded_by :address 
    after_validation :geocode 

end 

============ UPDATE ========= ====

Таким образом, после внушения, я открыл консоль рельсы на моей рабочей машине с использованием -

bundle exec rails console production 

и побежал -

Geocoder.search("San Francisco, CA") 

который генерировал эту ошибку -

Geocoding API not responding fast enough (use Geocoder.configure(:timeout => ...) to set limit). 
=> [] 

, что, как говорится, в моей конфигурации/initilizers/geocoder.rb файл, у меня есть -

Geocoder::Configuration.timeout = 15 

Что такое соответствующий предел времени ожидания устанавливать? Мне нужны координаты, но также не хочу, чтобы это продолжалось вечно ...

=========== ОБНОВЛЕНИЕ =============

Я нашел это related question, хотя я бы предпочел запустить эту сторону сервера задач, а не на стороне клиента.

+0

Есть ли какие-либо ошибки бросаются ? Или это просто не генерирует lat/long? Что это происходит? – zeantsoi

+0

@zeantsoi - Я заявил в своем вопросе, что ошибок не было. Он просто не генерирует (или не хранит) координаты lat/lng. Как я уже упоминал выше, это отлично работает в разработке. –

+0

как вы получили эти результаты? вы пробовали в недавно перезапущенном сеансе консоли? – xlembouras

ответ

3

Автор жемчужину Geocoder имеет this to say:

[A] повторно Вы уверены, что сервер приложений был перезапущен после добавления Geocoder?

Во-первых, убедитесь, что камень действительно установлен с помощью команды Geocoder в производственной консоли:

# from the production console 
Geocoder.search("San Francisco, CA") 

Если это не бросает какие-либо ошибки, попробуйте перезагрузить сервер. Мягкая загрузка может работать - жесткая загрузка лучше. Это перезагрузит всю среду Rails, включая любые установленные зависимости.

UPDATE:

Как уже упоминалось в комментариях к этому ответу, проблема связана с ошибкой Geocoding API not responding fast enough.

Сколько времени занимает соответствующий тайм-аут?

Это трудно сказать. Автор gem suggests 15, как вы уже установили.Служба геокодирования может быть на мгновение медленной - или она может быть медленной в целом. IMO, установите его поэтапно выше и найдите номер, где он начнет работать, а затем оставьте его там.

Обратите внимание, что client-side vs. server-side argument может не применяться здесь. Сообщение SO, указанное в вопросе ОП, относится к запросам квот. Проблема, связанная с этим вопросом, напротив, по-видимому, связана с скоростью геокодирования, которая не будет зависеть от того, сделаны ли вызовы клиентом или сервером.

+0

Так что это, наконец, породило ошибку для меня - API-интерфейс геокодирования не реагирует достаточно быстро (используйте Geocoder.configure (: timeout => ...), чтобы установить лимит). => [] ------ Как долго подходит тайм-аут? В настоящее время у меня есть ссылка Geocoder :: Configuration.timeout = 15 в моем файле geocoder.rb init. –

+0

Это сложный вопрос, чтобы дать окончательный ответ - см. Мое обновление для некоторых соображений. – zeantsoi

+0

Изменено значение тайм-аута до 30, и теперь все работает над производственным приложением. Спасибо :) –

6

Возможно, ваш инициализатор не загружен в производственной среде. Попробуйте запустить консольную команду (bundle exec rails console production) и запустите свой Geocoder::Configuration.timeout = 15 в консоли, а затем повторите попытку вашей тестовой команды.

+0

получил это, чтобы запустить, после применения этого и увеличения предела до 30, я получил команду Geocoder.search («Сан-Франциско, Калифорния»), чтобы работать с успехом. –

1

Я думаю, что это проблема с freegeoip, попробуйте следующее:

Введите это в рельсах консоли:

Geocoder.configure (: ip_lookup =>: telize)

Теперь попробуйте вас выполните поиск в консоли.

, если это работает вы можете иметь свой файл (конфигурационный/Инициализаторы/geocoder.rb)

Geocoder.configure(

    :timeout=>20, 

    :lookup=>:yandex, 

    :ip_lookup=>:telize, 

    :language=>:en, 

    :http_headers=>{}, 

    :use_https=>false, 

    :http_proxy=>nil, 

    :https_proxy=>nil, 

    :api_key=>nil, 

    :cache=>nil, 

    :cache_prefix=>"geocoder:", 

    :units=>:km, 

    :distances=>:linear 

) 

Я надеюсь, что это поможет вам.

0

Проверьте подключение к сети. Я обнаружил, что когда я пошел на более быстрое соединение, проблема была устранена. В моем случае я перешел от общественного Wi-Fi-подключения в кафе к моей горячей точке LTE на своем телефоне.

0

От ребят Google

* Рекомендуется использовать приложения, которые отвечают на пользовательский ввод, и, следовательно, являются очень высокой чувствительностью к задержкам, используйте функцию автозаполнения места в API Адресов (также доступен в JavaScript, Android, или iOS), а не адресное геокодирование. Place Autocomplete оптимизирован для использования в интерактивном режиме и, следовательно, имеет очень низкую задержку.

Геокодирование адресов в API геокодирования оптимизировано для использования с полными, однозначными, хорошо отформатированными адресами, такими как адреса доставки, введенные в онлайн-формы, и, следовательно, имеет более высокую задержку, чем Place Autocomplete. Это уже имеет место со старым передним геокодером. Разница задержки между подсказками и новым вперед геокодировании при дальнейшем увеличении, так как новый геокодер имеет больший охват и более высокое качество результата, но за счет несколько более высокой латентности. *

https://developers.google.com/maps/documentation/geocoding/faq

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

  • Нет связанных вопросов^_^