在 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
配置:
帖子的根路由#indexapplication.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 辅助方法中生成的资产路径具有重复的资产前缀的主要内容,如果未能解决你的问题,请参考以下文章
使用 Selenium 在页面的 onload() 中生成的 JavaScript 警报的解决方法是啥?