【问题标题】:How to render a remote file with rails如何使用 Rails 渲染远程文件
【发布时间】:2011-10-16 12:40:04
【问题描述】:

我在 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

【问题讨论】:

  • 为什么不直接定义一个到控制器的路由,该控制器下载该文件并将其用作输出?
  • 这当然是微不足道的,但你能举个例子吗?谢谢。
  • 看起来有人已经在他们的答案中写了一个例子;)重定向实际上会更简单。
  • 大家好,这里有消息吗?我有完全相同的问题,我在网上找不到关于这个的任何信息......
  • 您找到解决方案了吗?在这里分享会很有用。 (也可以接受自己的答案。)

标签: ruby-on-rails heroku sitemap


【解决方案1】:

基于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

还要确保站点地图(索引)文件包含指向位于您站点而非亚马逊的其他站点地图文件(站点地图 1、站点地图 2...)的链接。

【讨论】:

  • 这可能是唯一的方法。太棒了!
  • 您能否告诉我这背后的原因是什么“还要确保站点地图(索引)文件包含指向位于您网站上的其他站点地图文件(站点地图 1、站点地图 2...)的链接,而不是亚马逊。” ?
  • @Mohsin Sethi,我这样做已经 5 年了。所以我不知道。您可能不需要它,或者您需要它的原因与您需要从您的站点而不是直接从 aws 提供索引站点地图的原因相同。
【解决方案2】:

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

如果是这样,这里有一些文章会有所帮助:

【讨论】:

    【解决方案3】:

    创建一个将重定向到 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
    

    【讨论】:

    • 虽然 url 正确,但 s3 需要凭据。所以这行不通。
    • 问题是如果您提供带有重定向的站点地图,Google 会不高兴,因为站点地图需要从映射的域内提供。此外,这样会暴露 s3 目录,这不是最佳做法。
    • 正如 Topo 所说的站点地图不应该在重定向之后,这个解决方案将不起作用
    猜你喜欢
    • 2012-09-19
    • 2013-03-15
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2022-11-29
    相关资源
    最近更新 更多