我正在使用 Geocoder 来根据用户在提交表单时提供的地址获取纬度和经度坐标。我这样做是为了使用Google Maps API绘制标记。在开发中,这完美地运作 - 没有问题。然而当我推送到生产环境时,Geocoder没有生成纬度和经度。我已经检查了我的生产日志,并没有错误。我还检查了宝石是否只安装在开发环境中,我已经在我的生产机器上重新启动了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 控制台。
注: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
适当的超时限制是多久?我需要坐标,但也不想让它无限制运行...
=========== 更新 =============
我发现了这个相关问题,尽管我更喜欢在服务器端而不是客户端上运行此任务。
Geocoder.configure(:timeout => 30)
- brntsllvn