Rails资产管道,子域不检索图像

时间:2013-06-28 09:12:53

标签: ruby-on-rails asset-pipeline

我已经开始在我的应用程序中使用Rails Asset Pipeline。它适用于样式表和javascripts,但我不能让我的图像成功返回。我想我理解为什么,但我不知道如何解决它。

我的应用程序使用子域名:bob.myapp.com/,mandy.myapp.com/等。当我在视图中放置image_tag链接时,例如link_to image_tag('remove.png'...)使用HTML属性src="/assets/remove.png"呈现它。但是,这是合理的,这意味着浏览器正在寻找的位置是:http://bob.myapp.com/assets/remove.png

如果我将其直接粘贴到我的地址栏中,则找不到它。如果我将子域更改为http://www.myapp.com/assets/remove.png(即将 bob 切换为 www ),则会成功检索到该图像。

那么,我如何强制我的image_tag www 寻找来源,或者我可以以某种方式使资产管道默认在所有子域中运行?

Rails 3.1.0 Ruby 1.9.2p0

1 个答案:

答案 0 :(得分:1)

您可能希望在config/environments/production.rb(或您定义的任何其他环境)中设置资源的主机。

例如:

MyApp::Application.configure do
  config.action_controller.asset_host = "http://www.myapp.com"
end

由于它接受Proc,您可以在那里进行一些计算并为资产设置不同的主机:

MyApp::Application.configure do
  config.action_controller.asset_host = Proc.new do |source|
    subdomain = compute_subdomain(source)
    "http://#{subdomain}.myapp.com"
  end
end

image_tag(source, options)助手将尊重它并输出资产的完整网址。

虽然在我看来,我建议将所有资产放在每个资产服务器上,这样就不需要设置它了。