在生产中,就像在较早版本的Rails中一样,我们通常首先预编译我们的assets资源 ,以便在为公共assets资源 提供服务时性能更好.但是在rails 7中,由于默认配置表明您应该使用来自assets资源 管道的所有css、字体和自定义js文件,以及使用导入映射的外部js库,那么rails 7在生产中的预编译过程是什么?

推荐答案

什么都没变.开发中使用assets资源 管道(又名sprocketspropshaft)为任何本地assets资源 提供服务,包括import-maps.当您进行更改时,assets资源 是compiled个动态assets资源 ,并且当您刷新页面时会为新assets资源 提供服务.这个过程需要时间、内存和CPU周期--这是您不想在生产中浪费的东西.

解决办法是提前把一切都汇编好--precompile.所有内容都会进入public/assets号目录.然后,像nginx一样,Web服务器被配置为服务从public/assets/*/assets/*的任何请求.通过这种方式,可以快速处理assets资源 ,您的应用程序服务器不需要关心它们.

使用资源管道中的所有css、字体和自定义js文件.

在我们拥有sprocketswebpacker之前,有两条assets资源 管线线做了同样的事情.两个assets资源 URL /assets/packs、两个编译过程、两个公共目录public/assetspublic/packs.

rails 7年,一切都与sprockets挂钩.任何新的构建工具,如tailwindcss,都可以处理assets资源 并将它们放在app/assets/builds中,在app/assets/builds中链轮可以执行以前的工作--编译并在开发中服务,为生产预编译.

Ruby-on-rails相关问答推荐

在ransackable_scopes中的作用域上创建activeadmin过滤器

在Ruby on Rails中获取堆栈级别太深错误(&Q)

RubyOnRail在测试环境中启动失败

仅在两个子域间共享Rails cookies,并为所有其他子域使用单独的cookie

Rspec期望()与期望{}

GroupingError:错误:列必须出现在 GROUP BY 子句中或在聚合函数中使用

无法在生产服务器上启动 Rails 4 控制台

在 Rails 中,如何处理多个选中的复选框,只需拆分 , 或?

适合mysql比较的Ruby datetime

Rails data-disable-with re-enable 按钮

如何在特定时区(最好是我的应用程序的默认时区,而不是 UTC)中创建新的 DateTime 对象?

Ruby on Rails 中的MySQL 服务器已经消失

在 Rails 路由中更改 id 参数

Dotenv 多行变量

我是否必须手动卸载所有依赖的 gem?

Ruby on Rails:如何从显示的子资源中获取错误消息?

ActiveRecord 中多列的索引

用于在多行上链接调用的 Ruby 约定

保存用户偏好的最佳方法?

如何测试也定义为辅助方法的 ApplicationController 方法?