对HTTPS使用Rails googlecharts宝石/ SSL网站
-
12-09-2019 - |
题
我用我的Rails应用程序对于一些简单的图表中googlecharts宝石。它精美的作品,除了我的应用程序需要在任何时候都SSL加密。为了拉谷歌图表,当然图表宝石发出HTTP请求传送给Google,导致浏览器警告的页面上,不安全的内容,大多数用户使用。有没有其他人遇到这个问题,并想出了一个解决方案,以避免该警告?我怕我会需要找出一种方法,使HTTP调用,存储图像谷歌本地返回,然后显示在应用程序,但想通别人已经找到了一个不错的方式来处理这个问题。
解决方案
在API谷歌图表API端点被存储在Gchart类内的类变量@@url
。所以最初我想的Monkeypatching类变量设置URL为https
# Put this in an initializer
Gchart.send :class_variable_set, :@@url, "https://chart.apis.google.com/chart?"
唉谷歌图表不通过https工作。因此,我们不能用这种方法。由于Gchart类方法只返回一个URL,我们可以在通过使用您选择的协议ActionController的SEND_DATA方法执行API调用服务器端和代理到客户端的代理控制器的方法包裹起来的调用。这样,你就不必重新发明Gchart库轮。
class ChartsController < ApplicationController
require 'net/http'
require 'gchart'
def show
options = params.except :controller, :action
options[:data].map! { |x| x.to_i } if options[:data]
begin
chart = URI.parse(Gchart.send options.delete(:type), options)
send_data Net::HTTP.get(chart), :content_type => 'image/png', :disposition => 'inline'
rescue
raise ActiveRecord::RecordNotFound
end
end
end
助手,你可以在你的意见是:
module ApplicationHelper
def chart_tag(options ={})
image_tag chart_path(options)
end
end
和路由
map.resource :chart, :only => :show
用法:
<%= chart_tag :type => "line", :size => '200x300', :title => "example title", :bg => 'efefef', :legend => ['first data set label', 'second data set label'], :data => [10, 30, 120, 45, 72] %>
代码是未经测试,但应该给你一个良好的开端。
其他提示
我使用的是GchartRB宝石,而第一种水溶液的修改后的版本为我工作为好。你将不得不使用to_escaped_url方法URI.parse正确处理它。
我不知道现有的插件,将做到这一点的,但你可以做你自己。简单地写一个新的控制器的方法,将通过HTTP GET的图表,然后立即返回它(不需要将它保存到文件)
在控制器:
require 'net/http'
def googlechart
send_data Net::HTTP.get("http://chart.apis.google.com/chart?#{params[:api]}"),
:content_type => 'image/png',
:disposition => 'inline'
end
在视图:
<%= image_tag googlechart_path(:api=>'cht=p&chd=s:Uf9a&chs=200x100&chl=January') %>
刚刚成立的路线,就这么简单。
不隶属于 StackOverflow