【问题标题】:Using local assets to override gem file assets使用本地资产覆盖 gem 文件资产
【发布时间】:2015-10-16 21:38:03
【问题描述】:

我有一个包含 image_x.jpg 的 Rails 引擎 gem。我试图通过将其添加到资产和公共目录中,用我在项目中本地拥有的图像覆盖该图像。

但是,Rails 继续显示来自 gem 文件的图像,而不是我的本地文件。

如果我对 gem 进行monkeypatch 并删除图像 image_x.jpg,那么我本地项目中的图像就会出现,但这并不理想。

有没有办法告诉 Rails 从我的本地项目而不是 gem 中的图像提供图像?

换句话说,有没有办法将本地资产优先于 gem 文件资产?

【问题讨论】:

    标签: ruby-on-rails gem rails-engines


    【解决方案1】:

    默认情况下,Rails 应该使用您的本地 image_x.jpg。

    要检查 Rails 搜索资产的顺序,请打开控制台并输入:

    Rails.application.config.assets.paths

    您应该能够验证您的 app/assets 目录是否出现在搜索 PATH 中 gem 的 assets 目录之前。如果没有,可能是某些东西正在修改您的资产路径。

    如果您的资产路径看起来错误,您可以轻松修改它。 (它只是一个字符串数组。)要添加一个新的最高优先级目录,请尝试在初始化程序中添加类似这样的内容:

    Rails.application.config.assets.paths.unshift "/some/other/path"
    

    同时尝试删除tmp/cache/assets 并重新启动您的服务器。

    【讨论】:

    • 有没有办法重新确定 Rails.application.config.assets.paths 的优先级?还是在顶部而不是底部添加路径?
    • 当然。它只是一个表示目录路径的字符串数组。我会更新我的答案。
    • Unshift 似乎对此不起作用。反转数组也不行。反转字符串是我知道解释问题的最佳方式,假设 gem 添加路径 A 和 B。然后我添加路径 C 和 D。现在我们有 A、B、C、D。当我反转!我最终得到A,B,D,C。因此,我似乎可以在数组中修改的唯一路径是本地添加的路径,而不是通过 gem 添加的路径。有想法该怎么解决这个吗?还有一件事,我在我的environments/development.rb 配置中添加了这一行,可能是放错地方了?
    • 继续向您发送赏金。我还没有解决问题,但是开始查看Rails.application.config.assets.path 的建议非常有帮助。谢谢你 :) 希望你对如何解决我在上一条评论中详述的问题有更深入的了解。
    • 谢谢。我认为您不想反转整个数组。这可能会以意想不到的方式影响您的应用程序和 gem。 Unshift 是可行的方法,当我在控制台中对其进行测试时,它对我来说效果很好。我猜您遇到问题是因为您在初始化过程中执行代码的位置。您希望它在 gem 执行配置后发生。试着把它移到config/initializers/ 看看会发生什么。
    猜你喜欢
    • 2013-05-02
    • 2014-03-31
    • 2020-09-18
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多