带有子域的 Rails 资产管道不检索图像
Posted
技术标签:
【中文标题】带有子域的 Rails 资产管道不检索图像【英文标题】:Rails Asset Pipeline with Sub-domains not retrieving Images 【发布时间】:2013-06-26 00:26:56 【问题描述】:我已经开始在我的应用程序中使用 Rails 资产管道。它适用于样式表和 javascript,但我无法成功返回我的图像。我想我明白为什么,但我不知道如何解决它。
我的应用程序使用子域: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 寻找来源,或者我能否以某种方式使资产管道默认在所有子域中工作?
导轨 3.1.0 红宝石 1.9.2p0
【问题讨论】:
【参考方案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)
助手会尊重它并输出资产的完整 url。
虽然以我的拙见,我建议将所有资产放在每个资产服务器上,这样就不需要设置了。
【讨论】:
以上是关于带有子域的 Rails 资产管道不检索图像的主要内容,如果未能解决你的问题,请参考以下文章
带有 sass @imports 的 Rails 资产管道 [重复]
Rails 6 中的 ActionView::Template::Error(资产管道中不存在资产。)
Rails 3.1 资产管道 - 为啥我的图像没有为生产进行预编译?
sass-rails 资产管道:生成图像路径不正确; `url(/images/blah.png)` 而不是 `url(/assets/blah.png)`