问题标签 [rails-sprockets]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - #= 升级到 Rails 5 后需要不工作
我将 Rails 4.2.10 应用程序升级到 Rails 5。解决了捆绑错误和一些弃用问题。我能够启动 Rails 应用程序,但是当我尝试加载应用程序时,它Invalid CSS after "#": expected id name, was "= require
在 css 文件中失败并出现错误
我尝试使用@import,但是对于供应商/资产中的外部文件它失败了。不过,我想了解为什么它不再工作了。在我的配置中,我有文件config.assets.precompile +=
在我的 index.html.erb 中,
在 users.scss 中,
注意:我在 Gemfile 中使用 sass-rails
我得到的错误,
sprockets - 在请求期间创建新样式表然后立即要求它会产生错误
Sprockets 似乎内置了一个缓存环境,该环境在请求开始时加载所有可能资产的列表,然后要求该列表之外的任何资产都会引发错误。
我编写了一个自定义指令来创建一个新的 CSS 文件——我需要将现有文件的内容包装在一个新的选择器中——如下所示:
但是,要求新包装的资产失败,因为它不在 Sprockets 知道的文件列表中。刷新页面时,第一个资产将成功,因为它现在在请求开始时就存在,因此在缓存列表中,但第二个资产将失败,依此类推。
有没有办法解决这个问题?禁用缓存并不能解决问题。
我猜它与此代码有关https://github.com/rails/sprockets-rails/pull/197/files - 但是没有重新打开一堆类,有没有办法避免缓存环境?
ruby-on-rails - 如何通过 Webpack 在 Rails 6 中使用自定义字体
对于我新启动的 Rails 6 应用程序,我想要一组自定义字体。我的设置如下所示:
然后在app/assets/stylesheets/fonts
我的 sass 文件中引用了所有 4 个文件。
我application.sass
有以下进口:@import 'my-font'
.
当我运行rails assets:precompile
它时,它还将所有4个带有后缀版本(例如my-font-7384658374658237465837246587263458.eot
)的文件放在public
目录中。
但是,当我运行应用程序时,浏览器正在根目录中寻找一个名为 的文件my-font.eot
,当然该文件不存在并且 404s。这对我来说绝对是一个配置问题,但我不知道在哪里。任何帮助将非常感激。
ruby-on-rails - Rails 动态资产超时错误::::Sprockets::Railtie.build_environment(Rails.application).find_asset("#{params[:controller]}.css")
我在动态加载资产时遇到超时错误。
动态加载资产的代码片段(application.html.erb):
您能否建议如何解决超时错误。
rspec - NameError: 未初始化的常量 Sprockets::Engines
rails 5.0
(从 4.2 升级到 5.0)ruby 2.6.4
, rspec 3.6
我正在将 rails 应用程序从 rails 4.2 升级到 5.2。目前正在尝试达到 5.0。我正在修复弃用和测试,但目前在运行我的规范测试时遇到了这个错误。在此处列出一个规范以节省空间,但它们都失败并出现相同的错误(如下)。
我已经阅读了大量与此类似的线程,但没有关于如何修复它的真正答案 - 或者我的问题。
FactoryGirl 弃用将升级到 FactoryBot,我只是还没有。
在上面的输出中,我看到了这些错误/线索:
在该文件中,第 1 行是require 'spec_helper'
在该文件中,第 8 行是: require File.expand_path("../../config/environment", __FILE__)
在该文件中,第 8 行是:StudentServices::Application.initialize!
我列出了sass-rails
,因为我在 stackoverflow 上看到了一篇文章,提到这个问题在 sass-rails 中得到了解决。 rails 4 - rake 命令在我每次运行 rake db:migrate 命令时都会显示弃用警告 这些 gem 处于最新版本,但问题仍然存在。
我确实玩过将链轮降低到3.7.0
,这给了我一个不同的错误,但仍然涉及链轮:
在此输出中,有一个指向 github 的 url 讨论了此弃用。我不确定如何将它应用于我的应用程序来解决这个问题,或者如果这甚至是问题。
我希望有人可以更多地了解导致此 sprockets 错误的原因以及如何解决它。
我很高兴编辑这篇文章并在需要时添加更多内容。
谢谢你看这个。
jc
ruby-on-rails - 如何使 sprockets(或 rack,或 nginx?)激励浏览器缓存字体并正确返回 304?
在用sprockets 替换webpacker 的 Rails6 应用程序中,我没有设法让 sprockets 使我的浏览器缓存字体。编辑:我的浏览器确实缓存了字体,但谷歌抱怨并且 curl 显示了应用程序的响应方式(与304不同,见下文)。
更新
似乎304
只有当您告诉服务器(通过If-Modified-Since
-headers)您确切知道最后修改的版本时才会返回 a 。虽然我的 Mozilla 开发资源并没有说明这显然应该是这种情况(而且我没有阅读 RFC 的心情),但它可能是有道理的:
- 您的服务器在 2020 年 1 月 1 日为资产提供服务(为简单起见,批准日期)
- 浏览器访问您并将资产与日期一起存储
- 第二天同一浏览器重新访问,向服务器询问资产并告诉它最后一个已知日期(
2020-01-01
通过If-Modified-Since
-header)- 服务器回答
304
:你已经知道这些东西了
- 服务器回答
- 第二天发生错误,服务器提供开发资产
- 浏览器重新访问,获取新的(但错误的资产,
Last modified
日期为 2020-01-03)并将其存储在该日期旁边 - 服务器管理员删除了错误的开发资产
- 第二天,浏览器访问并告诉服务器“我知道昨天的事情”
- 服务器告诉浏览器:不,忘记了,正确的有效载荷是这个,这是时间戳:2020-01-01。
在下面的测试中,我使用If-Modified-Since
了与最后一个(生产)资产时间戳不对应的标题。感谢@bliof 帮助解决这个问题。
因为我的最终目标是让谷歌的速度洞察力快乐(现在我知道如果所有玩家都表现良好,这个 304- 响应有效)我将遵循 Rails 5+ 路径config.public_file_server.headers
(https://blog.bigbinary.com/2015/10 /31/rails-5-allows-setting-custom-http-headers-for-assets.html)。Rails 指南还指出了您通常如何让您的网络服务器(或 CDN)处理这种情况(https://guides.rubyonrails.org/asset_pipeline.html#in-production),但我的堆栈工作方式有所不同。
原文如下
字体在 eg 中app/assets/fonts/OTF/SourceSansPro-BoldIt.otf
并正确放入public/assets/OTF/...fingerprint...
(伴随着.gz变体)。它们通过 SCSS font-face 规则引用,指向其中包含相应指纹的文件(使用font-url()
)。
当curl
ing 这些时,我似乎永远不会得到 a HTTP/1.1 304 Not Modified
,而是 a200
与给定的有效载荷。使用其他(JS,CSS)资产,它可以按预期工作。
我没有修改config/initializers/assets.rb
,因为所有子目录和文件都应该已经被拾取(并且assets:precompile
输出和内容public/assets
显示它有效)。
深入了解https://github.com/rails/sprockets/blob/9909da64595ddcfa1e7ee40ed1d99738961288ec/lib/sprockets/server.rb#L73的 sprockets 代码似乎表明可能没有正确设置 etag 或类似的东西,但我确实这样做了并没有真正破坏该代码。
据我所知,该应用程序使用非常标准的 nginx 配置与 dokku(基本上是 heroku)一起部署:https ://github.com/dokku/dokku/blob/master/plugins/nginx-vhosts/templates/nginx .conf.sigil。该应用程序为资产本身提供服务(如在 heroku 中)。
我该怎么做才能使 sprockets 添加相关的标头/用 a “正确”响应304
?任何想法如何调试该问题?
相关的“调试”部分
对 CSS 的初始请求
后续获取 CSS
(相关部分,其他参数和输出省略)。请注意,会同时发送If-Modified-Since: Mon, 06 Apr 2020 11:59:56 GMT标头。
(这就是我想要的:A 304 Not Modified。
字体资源的初始请求
后续获取字体
我发现有趣的是,服务器实际上发送了Last-Modified,它在If-Modified-Since之前。我猜聪明的浏览器会在那里停止对话,但我真的很想看到一个表现良好的 304。
ruby-on-rails - Sprockets::Rails::Helper::AssetNotFound - 资产“my_logo.jpeg”不在资产管道中
收到此错误,我错过了什么?
我制作了一个新的 Ruby on Rails 应用程序
rails new my_app
#Rails 6.0.3.2允许它安装 gems、web packer 等。
添加
config.assets.compile = false
到config/environments/development.rb
添加包含此内容的静态控制器和索引文件
应用程序/控制器/static_controller.r b
应用程序/视图/静态/index.html.erb
将 my_logo.jpeg 文件添加到
app/assets/images/
预编译资产:
bundle exec rake assets:precompile
将 rails 服务器运行为:
bundle exec rails server
我可以看到该文件的public/assets/
名称如下:my_logo-484af9fb82bc8a0279ef38b527402b5697475bd8f827251f46fbb182be6c07a1.jpg
如果我将其设置为 true,它将很好地显示图像:config.assets.compile = true
清单文件内容也来自public/assets/.sprockets-manifest-a7f9f10978778e828273bf0c790645f6.json
我也打开config.assets.unknown_asset_fallback = true
看看路径是什么,结果是:http://localhost:3000/images/my_logo.jpg
当它是假的(当它工作时),我得到这条路径:http://localhost:3000/assets/my_logo-484af9fb82bc8a0279ef38b527402b5697475bd8f827251f46fbb182be6c07a1.jpg
ruby-on-rails - 是否可以/建议在没有 webpack(er) 的情况下运行 Rails 6?
我正在启动一个新的 Rails 6 应用程序。如果我理解正确的话,Webpack(er) ( gem webpacker
) 已经取代 Sprockets 作为包含/缩小 JS ( source ) 的新标准。此外,Rails 6 现在都需要Node.js 和 Yarn。
我是否正确假设 Node.js 和 Yarn 依赖项只是由于包含 Webpack,或者 Rails 6 的其他组件也需要它们?
从 Rails 6 应用程序中删除 Webpack 和 Node 和 Yarn 并继续使用 Rails 资产管道(除了缺少 Webpack 功能)是否有任何可能的缺点?
css - 在 rails6 开发中禁用加载所有样式表
我想通过注释/取消注释以下行来加载/卸载特定的 css 调试 bulma 结构stylesheet_link_tag
:
我的样式表目录树是这样的:
但是当我像上面那样评论那一行时,css文件被加载(以及grid.css)。
我认为link_directory
只有样式表目录,不能递归加载:
所有其他配置默认为 Rails 6.1.3。
为什么 app/assets/stylesheets/bulma/debug.css 会自动加载,我该如何禁用它?
ruby-on-rails - Sprockets::FileNotFound: 将 Rails 6 应用程序部署到 Heroku 时找不到类型为“text/scss”的文件“jquery-ui”
我正在努力将我的 Rails 6 应用程序部署到 Heroku - 部署因以下错误消息而中断:
这是我的app/assets/config/manifest.js
:
并且是app/assets/stylesheets/application.scss
文件:
package.json
:
我该如何解决这个问题?
先感谢您。