在 scss 辅助方法中生成的资产路径具有重复的资产前缀

Posted

技术标签:

【中文标题】在 scss 辅助方法中生成的资产路径具有重复的资产前缀【英文标题】:Asset path generated in scss helper methods has duplicated asset prefix 【发布时间】:2016-06-26 19:56:44 【问题描述】:

我认为这种行为是一个错误,但我也在这里问。我已经在 sprockets-rails github repo 上打开了一个错误报告。

我在使用资产前缀时遇到问题。如果我配置Rails.application.config.assets.prefix = 'myprefix'config/initializers/assets.rb,然后运行:

RAILS_ENV=production rake assets:clobber RAILS_ENV=production rake assets:precompile

我所有的预编译资产都使用正确的路径 (public/myprefix/asset_digest.png) 生成。从 .erb 文件中查找资产工作正常,路径正确生成,一切都正确显示。问题是image-url() 中生成的路径和 .scss 文件中的类似方法会获得两次前缀。

所以Rails 不是public/myprefix/background_digest.jpg 而是试图在public/myprefix/myprefix/background_digest.jpg 中查找图像,但图像已正确预编译并保存到public/myprefix 文件夹。一种解决方法是简单地将所有资产从myprefix 复制到myprefix/myprefix,但这是一种令人讨厌的处理方式。这只发生在从 .scss 文件中引用的资产。

为了确保我的配置没有问题,我尝试在新应用程序上重现它:

红宝石:2.3.0 导轨:4.2.6。rails new prefixtext -T cd prefixtest rails generate scaffold post title body:string

配置:

帖子的根路由#index application.scss:.background width: 500px; height: 500px; background-image: image-url('my-background.jpg'); 中的一个 CSS 规则 将 .background 类添加到帖子索引视图的 div 迁移数据库 assets:clobber 和 assets:precompile 启动服务器 所有命令都以RAILS_ENV=production为前缀

我也尝试使用 sprockets-rails 版本 2.3.2,并且发生了同样的事情。

我的机器是带有 rvm 的 ArchLinux,朋友也在他的机器上尝试过(最后一个 Ubuntu 也带有 rvm),同样的事情发生在我的服务器上(带有 rvm 的 CentOs 7)。 测试的 Ruby 版本:2.3.0、2.1.2、2.1.5。经过测试的 Rails 版本:4.2.1、4.2.6

任何人都知道可能是什么情况,或者它确实是一个错误。我该如何进一步测试它? 这是错误报告:https://github.com/rails/sprockets-rails/issues/363

【问题讨论】:

【参考方案1】:

你忘记了一件简单的事情......斜线:)

而不是拥有

Rails.application.config.assets.prefix = 'myprefix' 

在 config/initializers/assets.rb 中

你需要放

Rails.application.config.assets.prefix = '/myprefix'

就是这样......我完全按照你的步骤做了,它在本地为我工作。

附:我刚刚在我的生产服务器上启动了一个新应用程序,一切运行良好。

【讨论】:

前缀开头的斜线。它被留下了。

以上是关于在 scss 辅助方法中生成的资产路径具有重复的资产前缀的主要内容,如果未能解决你的问题,请参考以下文章

从.NET中生成的XML中删除命名空间[重复]

怎么找到Eclipse中生成的.class文件

使用 Selenium 在页面的 onload() 中生成的 JavaScript 警报的解决方法是啥?

jpa中生成的表中的错误排序

如何在 rails 6/webpacker 中引用 scss 文件路径?

Angular 6 从带有资产的 node_modules 导入 SCSS