我在我的rails应用程序中使用googlecharts gem来制作一些简单的图表。它的工作非常好,除非我的应用程序需要随时进行SSL加密。为了拉动谷歌图表,图表宝石当然会向谷歌提出http请求,导致浏览器警告大多数用户页面上的某些不安全内容。有没有其他人面临这个问题,并设计了一个解决方案来避免这种警告?恐怕我需要找出一种方法来进行http调用,将图像存储在本地返回的google,然后在应用中显示该图片,但发现其他人已经找到了一种处理此问题的好方法。在HTTPS/SSL站点上使用Rails googlecharts gem
回答
API Google Charts API端点存储在Gchart类中的类变量@@url
中。所以最初我想到monkeypatching类变量设置网址为https
# Put this in an initializer
Gchart.send :class_variable_set, :@@url, "https://chart.apis.google.com/chart?"
alas Google Charts无法通过https工作。所以我们不能使用这种方法。由于Gchart类方法只是返回一个URL,因此我们可以将这些调用包装在代理控制器方法中,该方法执行API调用服务器端,并使用您选择的协议通过ActionController send_data方法将其代理到客户端。这样你就不必重新创建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] %>
代码是未经测试,但应该给你一个好的开始。
我不知道现有的插件会这样做,但你可以自己做。简单地写一个新的控制器方法,将通过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') %>
只需设置你的路线,你就全部设置好了。
的Net :: HTTP.get不会字符串作为参数工作。它需要是URI :: HTTP的实例或响应主机的类似对象。 – 2009-12-05 03:15:41
我正在使用GchartRB gem,并且第一个解决方案的修改版本也适用于我。您必须使用to_escaped_url方法才能正确处理URI.parse。
您可以显示Google在哪些位置显示图表现在支持SSL? – 2011-04-27 21:26:40
- 1. 如何在rails中使用googlecharts库?
- 2. 如何使用googlecharts宝石?
- 3. 如何在rails 4.2.0上使用“mini_backtrace”Gem?
- 4. 如何在Firefox中使用JSSH在rails上使用watir gem?
- 5. 使用php和mysql的GoogleCharts
- 6. 站点上的Rails部署5
- 7. 问题安装googlecharts宝石?
- 8. 使用Ruby on Rails在twitter上上传多张图片Twitter Gem
- 9. 安装了gem的Rails config.gem错误
- 10. 在rails应用中使用youtube_it gem
- 11. 我可以使用什么来在Windows上托管Rails站点?
- 12. 在register.com上部署ruby/rails站点
- 13. 如何使用datetimepicker-rails gem
- 14. 使用Ruby closure_tree gem without rails
- 15. Rails:使用PG gem的Sqlite
- 16. 如何在Rails路由器上使用React Router(不使用react-rails gem)?
- 17. 多个应用程序支持在Rails上使用APN Gem
- 18. Rails使用rails设计gem-settings
- 19. Rails,在开发时使用gem
- 20. 如何在Rails中使用Twitter gem?
- 21. 如何在Rails中使用Disqus gem?
- 22. NameError在Rails中使用每当gem 5
- 23. Ruby On Rails上的MySQL Gem
- 24. 创建一个optgroup在rails 3.2上使用simple_form gem
- 25. yt gem for youtube api在rails上使用ruby
- 26. 如何在Rails 3.0.x上使用可读性gem?
- 27. rails 3博客引擎/ gem,在heroku上工作,使用什么?
- 28. 在设计之上的Rails Bootstrap Gem
- 29. rails active_link_to在params上运行的gem
- 30. 在站点上使用API密钥
对不起,反应迟钝,但这是完美的。做得太好了。 – Dan 2009-12-08 03:29:45
欢迎你的家伙。 – 2009-12-08 03:32:25
我试过这样做:Gchart.send:class_variable_set,:@@ url,“https://chart.googleapis.com/chart?“ 在名为google_charts的初始化程序中,但似乎图书馆一直在从http://chart.apis.google.com/chart加载它 - 我是否需要执行其他操作? – 2012-04-11 17:11:55