【问题标题】:Rerouting to AWS hosted assets from a Heroku Rails app从 Heroku Rails 应用程序重新路由到 AWS 托管资产
【发布时间】:2015-06-13 18:27:58
【问题描述】:

我有一个 Heroku 托管的 Rails 应用程序,它的 slug 大小已达到 300MB 限制,无法推送到 Heroku。为了解决这个问题,我设置了一个 AWS S3 账户,并希望将从我的 Rails 应用程序请求的资产重定向到新的 S3 位置。 Rails 应用程序基本上只是提供使用相对 URL 指向静态资产的 JSON 文件。然后,使用 Rails JSON 的 iOS 应用程序具有硬编码的域 URL,并将资源的路径附加到该域并请求它需要的资产。

我想更新我的 Heroku 应用并更改我的资产位置,而不需要更新 iOS 应用来更改资产域。所以,我需要将 Rails 应用程序中的静态资产请求重定向到 AWS 服务器。

在我的 git 存储库中,我忽略了已移动到 AWS 服务器的公用文件夹中的资产。资产文件存在于我的本地计算机上,但在上传到 Heroku 时不属于 git 存储库。

到目前为止,我已尝试更改 config.action_controller.asset_host,但这似乎不起作用,因为这些是静态资产,并且在 Rails 获取之前由 Web 服务器返回。

我尝试使用路由规则重定向到不同的域,但这些路由似乎从未被捕获。静态文件似乎在 Rails 应用有机会处理请求之前返回。

我尝试使用 rack-rewrite gem 尝试将我的资产重定向到不同的域,并在 `initializers/rack_rewrite.rb 中使用以下内容:

require 'rack/rewrite'

AppNamespace::Application.config.middleware.insert_before(Rack::Lock, Rack::Rewrite) do
  r301 %r{/images(.*)}, 'http://my-subdomain.amazonaws.com/images$1'
end

这似乎也不起作用,它总是只返回静态文件。

到目前为止,我已经尝试了几个小时来找出处理这种情况的正确方法。我不是 Rails 开发人员,我开发的是 iOS 应用程序,所以请让我知道我是否以错误的方式处理此问题或完全错过了“正确”的执行方式。

【问题讨论】:

    标签: ruby-on-rails ruby git amazon-web-services heroku


    【解决方案1】:

    我使用路由和“rails_serve_static_assets”解决了这个问题。我不得不将本地图像移出公用文件夹,以避免 Nginx 在点击 Rails 应用程序之前返回图像。路线最终是这样的:

    match '/images/(*path)', :to => redirect { |params, request|  
      "#{Rails.configuration.assets.aws_url}#{request.path}"
    }
    

    【讨论】:

      猜你喜欢
      • 2015-02-21
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      相关资源
      最近更新 更多