我的控制器中有以下代码生成一个kml文件:
def generate_kml
links = Link.all.where('status = 1')
links_hash = {}
links.each do |link|
if links_hash["#{link.siteid1}-#{link.siteid2}".to_sym]
links_hash["#{link.siteid1}-#{link.siteid2}".to_sym][:count] += 1
links_hash["#{link.siteid1}-#{link.siteid2}".to_sym][:links] << link
else
links_hash["#{link.siteid1}-#{link.siteid2}".to_sym] = {}
links_hash["#{link.siteid1}-#{link.siteid2}".to_sym][:count] = 1
links_hash["#{link.siteid1}-#{link.siteid2}".to_sym][:links] = [link]
end
end
links.clear
sites = {}
links_hash.each_value do |linklist|
siteid1 = linklist[:links].first.siteid1
siteid2 = linklist[:links].first.siteid2
longitude1 = linklist[:links].first.longitude1
latitude1 = linklist[:links].first.latitude1
longitude2 = linklist[:links].first.longitude2
latitude2 = linklist[:links].first.latitude2
kml_string << "\n\n<Folder>"
kml_string << "\n<name> #{siteid1} - #{siteid2}</name>"
if sites[siteid1] != true
sites[siteid1] = true
#place the first point
kml_string << "\n<Placemark>\n<styleUrl>#site_icon</styleUrl>"
kml_string << "\n <name> #{siteid1}</name>"
#kml_string << "\n <description>#{site_properties link, 1}</description>"
kml_string << "\n <visibility>1</visibility>"
kml_string << "\n <Point>"
kml_string << "\n <coordinates>#{longitude1},#{latitude1}</coordinates>"
kml_string << "\n </Point>"
kml_string << "\n</Placemark>"
end
if sites[siteid2] != true
sites[siteid2] = true
#place the second point
kml_string << "\n<Placemark>\n<styleUrl>#site_icon</styleUrl>"
kml_string << "\n <name> #{siteid2}</name>"
#kml_string << "\n <description>#{site_properties link, 2}</description>"
kml_string << "\n <visibility>1</visibility>"
kml_string << "\n <Point>"
kml_string << "\n <coordinates>#{longitude2},#{latitude2}</coordinates>"
kml_string << "\n </Point>"
kml_string << "\n</Placemark>"
end
points = generate_points(latitude1, longitude1, latitude2, longitude2, linklist[:links].size)
line_count=0
linklist[:links].each do |link|
#draw a line
kml_string << "\n<Placemark>"
kml_string << "\n <name> #{siteid1} - #{siteid2}</name>"
kml_string << "\n <description>#{link_properties link}</description>"
kml_string << "<styleUrl> #working_link_line#{line_count+1}</styleUrl>"
kml_string << "\n <LineString>"
kml_string << "\n <altitudeMode>clampToGround</altitudeMode>"
kml_string << "\n <coordinates>#{points[line_count][0]},#{points[line_count][1]} #{points[line_count+1][0]},#{points[line_count+1][1]},0</coordinates>"
kml_string << "\n </LineString>"
kml_string << "\n</Placemark>"
line_count += 1
end
kml_string << "\n</Folder>"
end
links_hash.clear
send_data kml_string,
:type => 'charset=utf-8; text/xml',
:disposition => "attachment; filename=kmlfile.kml"
end
文件大小为2.87 MB。
问题:当我通过单击控制器中此操作的链接来调用 generate_kml 过程时,没有任何反应。我看不到状态栏中的任何进展,或任何已启动文件下载的指示。 10秒后,立即下载文件。当我在Mac上本地运行我的应用程序时会发生这种情况。
但是,当我在我们(强大的)本地服务器(在使用Ubuntu Server + Nginx + Phusion Passenger的局域网上)上部署此应用程序时,延迟需要更长的时间(大约60秒)才能达到相同的kml(相同尺寸)立即下载。
有没有人知道发生了什么以及可能的解决方法?
答案 0 :(得分:0)
没关系,我解决了这个问题。只是想分享以防有人遇到类似的问题。
瓶颈是我们的代理人。我刚刚将Rails应用程序服务器的IP地址(我的应用程序所在的位置)添加到我的浏览器的异常列表(bypass-proxy list),它就像一个魅力,生成并下载文件需要5秒钟。