如何使用rails渲染远程文件

时间:2011-07-30 12:51:19

标签: ruby-on-rails heroku sitemap

我在https://s3.amazonaws.com/mysite/sitemaps/sitemap1.xml.gz

上托管了www.mysite.com的站点地图

是否可以配置Rails(路由,控制器等)以在www.mysite.com/sitemap1.xml.gz下呈现文件sitemap1.xml?

感谢。

聚苯乙烯。站点地图在AWS下的原因是: https://github.com/kjvarga/sitemap_generator/wiki/Generate-Sitemaps-on-read-only-filesystems-like-Heroku

3 个答案:

答案 0 :(得分:3)

基于https://github.com/kjvarga/sitemap_generator/issues/173

我正在尝试这个...
routes.rb

get 'sitemap(:id).:format.:compression' => 'sitemap#show'

sitemap_controller.rb

中的

class SitemapController < ApplicationController
  def show
    data = open("http://{ENV['AWS_BUCKET_PROD']}.s3.amazonaws.com/sitemaps/sitemap#{params[:id]}.xml.gz")
    send_data data.read, :type => data.content_type
  end
end

还要确保站点地图(索引)文件包含指向您站点上的其他站点地图文件(sitemap1,sitemap2 ...)的链接,而不是亚马逊。

答案 1 :(得分:0)

据我了解,您正在部署到只读文件系统,例如Heroku。

如果是这样,以下是一些有用的文章:

答案 2 :(得分:-1)

创建一个控制器,该控制器将重定向到Amazon S3文件位置并为其创建匹配路由。

routes.rb中:

match 'sitemap1.xml.gz' => 'site_map#redirect'

site_map_controller.b:

class SiteMapController < ApplicationController
   def redirect
      redirect_to 'https://s3.amazonaws.com/mysite/sitemaps/sitemap1.xml.gz'
   end
end