gpt4 book ai didi

ruby-on-rails-3.1 - 部署到子 URI 时,Rails 3.1 中的预编译 Assets 损坏

转载 作者:行者123 更新时间:2023-12-04 07:43:22 27 4
gpt4 key购买 nike

我正在更新 Rails 3 应用程序以使用 Rails 3.1,作为其中的一部分,我正在使用新的 Assets 管道。到目前为止,除了一个我无法解决的相当烦人的问题之外,我已经让一切正常工作。

该应用程序及其所有 Assets 在开发中运行良好,但在生产中使用 Passenger ( http://the-host/sub-uri/ ) 部署到子 URI。这样做的问题是 Assets 是在部署期间预编译的,我的一个 CSS(嗯,它是一个 .css.scss 文件)文件正在使用 image-url来自 sass-rails 的 helper gem 。由于在预编译过程中,路径被硬编码到预编译的 CSS 文件中,因此不考虑 sub-uri:

在我的 .css.scss文件:

body { background-image: image-url("bg.png"); }

编译后的结果 application-<md5-hash-here>.css文件:
body { background-image: url(/assets/bg.png); }

使它正常工作应该是什么:
body { background-image: url(/sub-uri/assets/bg.png); }

这个场景是不是要求太多了?如果是这样,我将不得不切换回旧的非 Assets 管道方式,只提供来自 public 的图像和 CSS。 .然而,这似乎是应该考虑并解决的事情......?我错过了解决方案吗?

编辑 1:我应该注意使用 erb solution而是产生了与预期相同的结果。

编辑 2:回应 Benoit Garret 的评论

不,问题与 config.assets.prefix 无关.我尝试将其设置(设置为 /sub-uri/assets 而不是默认的 /assets )但结果证明这是错误的做法 - 似乎此设置已经与 Rails 应用程序的根相关,而不是服务器.删除它(并因此返回默认值)已经修复了所有引起的奇怪问题(并且有很多,所有 Assets 最终都在 /sub-uri/sub-uri/assets - 这都很奇怪)。唯一的问题是 image-url helper 和 friend 在预编译时不拾取子 URI。不用说,这是合乎逻辑的,因为当它被预编译时,它不可能知道它在Passenger下运行时会以这种方式配置。我的问题是如何通知它这一点,从而在预编译结果中得到正确的路径。如果确实可以做到。

我目前的解决方法是像这样在 CSS 中引用图像: url(../images/bg.png)并将其放入非流水线 public/images地点。几乎不理想,因为它不能从指纹识别和管道提供的所有内容中受益。

最佳答案

最后,我制定了一些解决方法/解决方案。

1) 来自 https://github.com/rails/sass-rails/issues/17看起来这可以在 sass-rails 中修复。我已经按照上面链接中提议的补丁的方式自己修补了 helpers.rb。我只是在 deploy.rb 的 Assets 预编译行中设置所需的环境变量.

我在一个文件中完成所有猴子补丁 config/initializers/gem_patches.rb .在此文件中,我将此方法修补为:

module Sass
module Rails
module Helpers
protected
def public_path(asset, kind)
path = options[:custom][:resolver].public_path(asset, kind.pluralize)
path = ENV['PRODUCTION_URI'] + path if ENV['PRODUCTION_URI']
path
end
end
end
end

2) 或者,如果您可以在 CSS 中嵌入图像,将样式表更改为具有 .erb 扩展名,并替换 image-url("bg.png")url(<%= asset_data_uri "bg.png" %>)无需更改 sass-rails 即可工作。 asset-data-uri不作为纯 Sass 函数存在,因此您必须使用 Rails 助手 asset_data_uri .

关于ruby-on-rails-3.1 - 部署到子 URI 时,Rails 3.1 中的预编译 Assets 损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7293918/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com