我有一个Heroku托管的Rails应用程序已经达到了300g的slug大小限制,并且无法推送到Heroku。要解决此问题,我已经设置了AWS S3帐户,并希望将我的Rails应用程序中请求的资产重定向到新的S3位置。 Rails应用程序基本上只提供使用相对URL指向静态资产的JSON文件。然后,使用Rails JSON的iOS应用程序具有硬编码的域URL,并将资源的路径附加到该域并请求所需的资产。
我想更新我的Heroku应用并更改我的资产位置,而无需更新iOS应用以更改资产域。因此,我需要将静态资产请求从Rails应用程序重定向到AWS服务器。
在我的git repo中,我忽略了我移动到AWS服务器的公用文件夹中的资源。资产文件存在于我的本地计算机上,但在上传到Heroku时不属于git repo。
到目前为止,我已经尝试更改似乎不起作用的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应用程序,所以如果我以错误的方式解决这个问题或完全错过"对"请告诉我。这样做的方式。
答案 0 :(得分:0)
我使用路线和' rails_serve_static_assets'解决了这个问题。我不得不将本地图像移出公共文件夹,以避免Nginx在点击Rails应用程序之前返回图像。路线最终如此:
match '/images/(*path)', :to => redirect { |params, request|
"#{Rails.configuration.assets.aws_url}#{request.path}"
}