Geocoder Gem 在生产环境中不起作用

     2023-02-23     39

关键词:

【中文标题】Geocoder Gem 在生产环境中不起作用【英文标题】:Geocoder Gem not working in Production Environment 【发布时间】:2014-01-31 16:02:40 【问题描述】:

所以我使用Geocoder 根据用户在提交表单时提供的地址提取经纬度坐标。我这样做是为了可以使用 Google Maps API 绘制标记。这在开发中完美运行 - 零问题。但是,当我投入生产时,地理编码器不会生成纬度和经度。我检查了我的生产日志,并且错误为零。我还检查以确保 gem 不仅是为开发而安装的,而且我已经在我的生产机器上重新启动了 unicorn 和 nginx。关于会发生什么的任何想法?

这是我正在执行此任务的模型的模型代码 --

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

============ 更新 =============

所以在提出建议后,我使用 --

在我的生产机器上打开了 rails 控制台
bundle exec rails console production

然后跑了——

Geocoder.search("San Francisco, CA")

产生了这个错误--

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

话虽如此,在我的 config/initilizers/geocoder.rb 文件中,我有 --

Geocoder::Configuration.timeout = 15

设置的适当超时限制是多少?我需要坐标,但也不想让它永远运行......

===========更新=============

我找到了这个related question,虽然我更喜欢在服务器端而不是在客户端运行这个任务。

【问题讨论】:

是否有任何错误被抛出?或者它根本不产生纬度/经度?它产生了什么 @zeantsoi - 我在我的问题中声明没有抛出错误。它根本不生成(或存储)纬度/经度坐标。就像我上面提到的,这在开发中非常有效。 您是如何获得这些结果的?您是否尝试过新重新启动的控制台会话? 文档似乎有更新语法:在#config/initializers/geocoder.rb 中,执行:Geocoder.configure(:timeout =&gt; 30) 【参考方案1】:

您的初始化程序可能未在生产环境中加载。尝试运行您的控制台命令 (bundle exec rails console production) 并在控制台中运行您的 Geocoder::Configuration.timeout = 15,然后再次尝试您的测试命令。

【讨论】:

让它运行,在应用它并将限制增加到 30 之后,我成功运行了 Geocoder.search("San Francisco, CA") 命令。【参考方案2】:

Geocoder gem 的作者有this to say:

[A]您确定应用服务器在您添加 Geocoder 后已重新启动?

首先,通过在生产控制台中发出 Geocoder 命令来验证 gem 确实已安装:

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

如果这没有引发任何错误,请尝试重新启动服务器。软启动可能会起作用——硬启动更好。这将重新加载您的整个 Rails 环境,包括所有已安装的依赖项。

更新

正如该答案的 cmets 中所述,该问题与 Geocoding API not responding fast enough 错误有关。

合适的超时时间是多久?

这很难说。 gem 的作者suggests 15,因为您已经将其设置为。地理编码服务可能会暂时变慢 - 或者整体上可能很慢。 IMO,将其设置得更高一些,然后找到它开始工作的数字——然后把它留在那里。

请注意,client-side vs. server-side argument 可能不适用于此处。 OP 问题中引用的 SO 帖子与 请求配额 相关。相比之下,问题中出现的问题似乎与地理编码速度有关,无论调用是由客户端还是由服务器进行的,这都不会受到影响。

【讨论】:

所以这最终对我产生了一个错误 - 地理编码 API 响应速度不够快(使用 Geocoder.configure(:timeout => ...) 来设置限制)。 => [] ------ 适当的超时时间是多少?我目前在我的 geocoder.rb 初始化文件中声明 Geocoder::Configuration.timeout = 15 这是一个很难给出明确答案的问题 - 请参阅我的更新以获得一些见解。 将超时值更改为 30,现在一切都在生产应用程序上运行。谢谢你:)【参考方案3】:

我认为是freegeoip的问题,试试下面的:

在您的 Rails 控制台中输入:

Geocoder.configure(:ip_lookup => :telize)

现在尝试在控制台中搜索。

如果可行,您可以拥有您的文件 (config/initializers/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

)

希望对你有所帮助。

【讨论】:

【参考方案4】:

检查您的网络连接。我发现当我使用更快的连接时,问题得到了缓解。就我而言,我从咖啡店的公共 wifi 连接转到手机上的 LTE 热点。

【讨论】:

【参考方案5】:

来自 Google 人员

*我们建议响应用户输入并因此对延迟高度敏感的应用程序使用 Places API 中的 Place Autocomplete 功能(也可用于 JavaScript、Android 或 iOS),而不是地址地理编码。地点自动完成经过优化,可交互使用,因此延迟非常低。

Geocoding API 中的地址地理编码经过优化,可用于完整、明确、格式正确的地址,例如在线表单中输入的送货地址,因此延迟时间比地点自动完成要高。旧的正向地理编码器已经是这种情况。 Place Autocomplete 与新的正向地理编码器之间的延迟差异进一步增加,因为新的地理编码器具有更大的覆盖范围和更好的结果质量,但代价是延迟稍高。*

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

【讨论】:

【参考方案6】:

您必须在config/initializers/geocoder.rb 上为生产环境设置查找服务,例如 google、yandex 等。否则它不会返回您所有请求的坐标。

Geocoder.configure(
  timeout: 3,
  lookup: :google,
  api_key: ENV['GOOGLE_MAPS_API_KEY'],
  units: :km
)

如果您将其设置为与 Google 合作,请确保在 https://console.developers.google.com 上创建一个 API 帐户以获取 API 密钥,否则它将无法正常工作。

【讨论】:

亚马逊应用内购买在生产环境中不起作用

】亚马逊应用内购买在生产环境中不起作用【英文标题】:Amazoninapppurchaseisnotworkinginproductionenvironment【发布时间】:2014-07-2001:58:05【问题描述】:亚马逊应用内购买无法在生产环境中运行。它总是指向沙盒模式。每次onSdkAvailable(... 查看详情

Rails 5 缓存在本地或生产环境中不起作用

】Rails5缓存在本地或生产环境中不起作用【英文标题】:Rails5cachingisn\'tworkinglocallyorinproduction【发布时间】:2020-07-2611:58:01【问题描述】:我正在尝试从这个外部数据源获取数据并将其显示在我的本地应用程序和生产环境中,并... 查看详情

适用于 iOS 的 Google Firebase 推送通知在生产环境中不起作用

】适用于iOS的GoogleFirebase推送通知在生产环境中不起作用【英文标题】:GoogleFirebasePushNotificationsforiOSarenotworkinginproductionenvironment【发布时间】:2016-12-2608:09:06【问题描述】:我正在使用GoogleFirebaseCloudMessagingAPI(FCM)向我的iOS应用发... 查看详情

盖茨比动态样式在生产版本中不起作用

】盖茨比动态样式在生产版本中不起作用【英文标题】:GatsbyDynamicstylingnotworkinginproductionbuild【发布时间】:2021-05-0318:04:04【问题描述】:我是Gatsby的新手,我正在使用带有postcss的tailwindcss。我在tailwind.config.js的主题对象中定义... 查看详情

iOS In App 购买在生产环境中不起作用(在 testflight 中可以)

】iOSInApp购买在生产环境中不起作用(在testflight中可以)【英文标题】:iOSInApppurchasesdonotworkinProduction(okayintestflight)【发布时间】:2021-05-1612:32:06【问题描述】:我在该应用中有3个可用的应用内购买。在生产中的版本上,我转到... 查看详情

Cron 工作在每当 gem 中不起作用

】Cron工作在每当gem中不起作用【英文标题】:CronjobnotworkinginWhenevergem【发布时间】:2011-11-2419:28:51【问题描述】:我有一个包含一堆任务的应用程序,每天我都想运行一个cron作业,为数据库中的每个任务创建一个DayTask。任务has... 查看详情

:footnotes 扩展在 Redcarpet Ruby gem 中不起作用

】:footnotes扩展在RedcarpetRubygem中不起作用【英文标题】::footnotesextensionwon\'tworkinRedcarpetRubygem【发布时间】:2013-09-1802:59:39【问题描述】:我一定遗漏了一些非常明显的东西——我无法在redcarpet上使用脚注。我有3.0.0版:>gemlistr... 查看详情

Express-Session 在生产/部署中不起作用

】Express-Session在生产/部署中不起作用【英文标题】:Express-Sessionnotworkinginproduction/deployment【发布时间】:2021-04-2207:23:50【问题描述】:Express-Session在开发环境中运行,因为它在我的浏览器中设置了“connect.sid”cookie。但是,在生... 查看详情

如何在生产中设置快速会话。快速会话在 https 中不起作用

】如何在生产中设置快速会话。快速会话在https中不起作用【英文标题】:Howtosetupexpress-sessioninproduction.Express-sessionisnotworkinginhttps【发布时间】:2020-04-2820:34:37【问题描述】:我使用express-session和connect-mongo来存储会话,它在开发... 查看详情

Firebase 存储在 Express 服务器环境中不起作用

...前正在构建一个应用程序并尝试测试我使用Express创建的生产服务器环境。该应用程序在通过webpack-dev-server提供服务时运行良好,但是当我的Expressserver.js被webp 查看详情

recurring_select gem:jquery 在我的配置中不起作用

】recurring_selectgem:jquery在我的配置中不起作用【英文标题】:recurring_selectgem:jquerynotworkinginmyconfiguration【发布时间】:2019-02-0109:48:51【问题描述】:我正在尝试在rails5项目上使用recurring_select来选择事件的重复日期。除了jquery模... 查看详情

Tailwind 自定义颜色在 Angular 生产构建中不起作用

】Tailwind自定义颜色在Angular生产构建中不起作用【英文标题】:TailwindCustomColoursnotWorkinginAngularProductionBuild【发布时间】:2021-12-0722:36:57【问题描述】:我在Tailwind中有一组颜色,在使用ngserve或Angular的开发版本时所有这些颜色都... 查看详情

Laravel 回显服务器在生产服务器中不起作用

】Laravel回显服务器在生产服务器中不起作用【英文标题】:Laravelechoservernotworkinginproductionserver【发布时间】:2019-01-2709:56:25【问题描述】:我在socket.io作为带有laravelecho的广播公司时遇到问题。我尝试了什么:phpartisancache:clearphp... 查看详情

react-router 在生产和浪涌部署中不起作用

】react-router在生产和浪涌部署中不起作用【英文标题】:react-routerdoesnotworkinproductionandsurgedeployments【发布时间】:2017-11-1310:37:26【问题描述】:我的react应用程序在localhost上运行良好,但是当我将它部署到gh-pages或浪涌后,它不... 查看详情

GatsbyImage 在生产站点中不起作用(从 WP CMS 中提取数据)

】GatsbyImage在生产站点中不起作用(从WPCMS中提取数据)【英文标题】:GatsbyImagenotworkinginproductionsite(PullingdatafromWPCMS)【发布时间】:2021-08-1412:16:03【问题描述】:编辑:通过将公共构建文件移动到服务器的根目录来解决问题。我... 查看详情

Bootstrap-sass 在 Rails 应用程序中不起作用

】Bootstrap-sass在Rails应用程序中不起作用【英文标题】:Bootstrap-sassnotworkingwithinRailsApp【发布时间】:2014-01-1301:03:06【问题描述】:我正在尝试为一个在gemfile中包含以下内容的rails应用程序做出贡献:gem\'bootstrap-sass\',\'~>2.3.2.2\'g... 查看详情

Firebase Phone Auth 在发布版本中不起作用

...ay商店时,PhoneAuth不起作用。将应用程序上传到Play商店的生产环境后,是否应该同时保留调 查看详情

pip install dlib 在 Anaconda 环境中不起作用

】pipinstalldlib在Anaconda环境中不起作用【英文标题】:pipinstalldlibnotworkinginAnacondaenvironment【发布时间】:2021-10-1702:54:21【问题描述】:我正在关注tutorial,以使用以下ymlfile启动和运行anaconda环境。问题是,我始终只在这种环境中遇... 查看详情