【发布时间】:2018-07-12 08:09:55
【问题描述】:
我有一个现有的rails 应用程序,我在一个单独的分支上工作以实施yarn 来管理我的供应商资产。我的应用堆栈是:
- ruby-2.4.0
- 导轨 5.1.4
- 节点 9.4.0
- 纱线 1.3.2
安装yarn后,我运行yarn init,它在项目根目录中生成了一个package.json。添加了几个包后,它看起来像:
# package.json
{
"name": "my-project-name",
"version": "1.0.0",
"private": true,
"repository": "my-repo",
"author": "me",
"license": "MIT",
"dependencies": {
"bootstrap": "3",
"font-awesome": "^4.7.0",
"jquery": "^3.3.1",
"jquery-backstretch": "^2.1.16",
"jquery-ujs": "^1.2.2",
"waypoints": "^4.0.1"
}
}
我在 app/assets 下创建了几个文件,用于包含来自 node_modules 的样式表和 JavaScript:
# app/assets/javascripts/node_modules.js
//= require jquery
//= require jquery-ujs
//= require bootstrap/dist/js/bootstrap.min.js
//= require waypoints
//= require jquery-backstretch
# app/assets/stylesheets/font_path_overwrite.scss
$fa-font-path: "font-awesome/fonts/";
# app/assets/stylesheets/node_modules.css.scss
/*
*= require bootstrap/dist/css/bootstrap.min.css
*= require font_path_overwrite
*= require font-awesome/scss/font-awesome
*/
我也变了:
# config/initializers/assets.rb
# ...
Rails.application.config.assets.paths << Rails.root.join('node_modules')
Rails.application.config.assets.precompile += %w(*.js *.scss)
Rails.application.config.assets.precompile += %w(*.png *.woff2 *.woff *.ttf *.eot *.jpg *.gif *.svg *.ico)
# Rakefile
# ...
Rake::Task['assets:precompile'].enhance [:js_deps_install]
task :js_deps_install do
sh 'yarn install'
end
根据SO-43170792,我添加了一个新的
heroku buildpacks:set heroku/ruby
heroku buildpacks:add --index 1 heroku/nodejs
在我的 staging environment 中,我部署了这些更改,我突然意识到我的资产预编译 node_modules/ 文件夹发生了一些奇怪的事情:虽然 js 和 css 文件似乎一切正常,但我遇到了一些字体问题(尤其是 font-awesome 的字体)。
在网络检查器中调试文件assets/font-awesome/fonts/fontawesome-webfont.ttf?v=4.7.0 未找到,因为它是预编译的,而不仅仅是复制到:
public/assets/font-awesome/fonts/fontawesome-webfont-[hash].ttf
我明白为什么我会面临这种情况(这与两个月前的this unaswered question 非常相似)。
我正在寻找一个干净的解决方案或智能解决方法(例如,创建一个中间件以将普通的 .ttf 请求重定向到 rails 投诉哈希版本并将答案缓存 x 小时。您有什么建议吗?
【问题讨论】:
-
一种可能性是在一个单独的文件中覆盖
@font-face,如此处建议github.com/rails/rails/issues/31266#issuecomment-347652737,但它看起来仍然是一个繁重的解决方法
标签: ruby-on-rails fonts asset-pipeline sprockets yarnpkg