1. 升级到 Rails 8.0
如果您正在升级现有应用程序,最好在升级前拥有良好的测试覆盖率。如果您还没有升级到 Rails 7.2,您应该先升级到 Rails 7.2,并确保您的应用程序在尝试升级到 Rails 8.0 之前仍能正常运行。在升级 Ruby on Rails 指南中提供了升级时需要注意的事项列表。
2. 主要特性
2.1. Kamal 2
Rails 现在预配置了 Kamal 2 用于部署您的应用程序。Kamal 只需要一个“kamal setup”命令,就可以将一台全新的 Linux 服务器变成应用程序或辅助服务器。
Kamal 2 还包括一个名为 Kamal Proxy 的代理,以取代它最初使用的通用 Traefik 选项。
2.2. Thruster
Dockerfile 已升级,包含了一个名为 Thruster 的新代理,它位于 Puma Web 服务器之前,提供 X-Sendfile 加速、资产缓存和资产压缩。
2.3. Solid Cable
Solid Cable 取代 Redis 作为 pubsub 服务器,用于将 WebSocket 消息从应用程序中继到连接到不同客户端的进程。Solid Cable 默认将发送的消息保存在数据库中一天。
2.4. Solid Cache
Solid Cache 取代 Redis 或 Memcached,用于存储 HTML 片段缓存。
2.5. Solid Queue
Solid Queue 取代了 Redis,以及 Resque、Delayed Job 或 Sidekiq 等独立的作业运行框架。
对于高性能安装,它基于 PostgreSQL 9.5 中首次引入的新的 FOR UPDATE SKIP LOCKED 机制,现在在 MySQL 8.0 及更高版本中也可用。它也适用于 SQLite。
2.6. Propshaft
Propshaft 现在是默认的资产管道,取代了旧的 Sprockets 系统。
2.7. 身份验证
身份验证系统生成器,为基于会话、可重置密码、元数据跟踪的身份验证系统创建了一个起点。
3. Railties
有关详细更改,请参阅变更日志。
3.1. 移除
移除已废弃的
config.read_encrypted_secrets。移除已废弃的文件
rails/console/app。移除已废弃的文件
rails/console/helpers。移除通过
Rails::ConsoleMethods扩展 Rails 控制台的已废弃支持。
3.2. 弃用
废弃
"rails/console/methods"的引用。废弃修改
STATS_DIRECTORIES,转而使用Rails::CodeStatistics.register_directory。废弃
bin/rake stats,转而使用bin/rails stats。
3.3. 显著变更
- 默认将
Regexp.timeout设置为1s,以提高对正则表达式拒绝服务攻击的安全性。
4. Action Cable
有关详细更改,请参阅变更日志。
4.1. 移除
4.2. 弃用
4.3. 显著变更
5. Action Pack
有关详细更改,请参阅变更日志。
5.1. 移除
- 移除
Rails.application.config.action_controller.allow_deprecated_parameters_hash_equality。
5.2. 弃用
- 废弃使用多路径绘制路由以加快路由速度。
5.3. 显著变更
- 引入更安全、更明确的参数处理方法
params#expect,例如params.expect(table: [ :attr ])取代params.require(:table).permit(:attr)。
6. Action View
有关详细更改,请参阅变更日志。
6.1. 移除
移除已废弃的对
form_with的model:参数传递nil的支持。移除已废弃的对
tag构建器中向空标签元素传递内容的的支持。
6.2. 弃用
6.3. 显著变更
7. Action Mailer
有关详细更改,请参阅变更日志。
7.1. 移除
7.2. 弃用
7.3. 显著变更
8. Active Record
有关详细更改,请参阅变更日志。
8.1. 移除
移除已废弃的
config.active_record.commit_transaction_on_non_local_return。移除已废弃的
config.active_record.allow_deprecated_singular_associations_name。移除已废弃的对查找未注册到 Active Record 的数据库适配器的支持。
移除已废弃的对使用关键字参数定义
enum的支持。移除已废弃的
config.active_record.warn_on_records_fetched_greater_than。移除已废弃的
config.active_record.sqlite3_deprecated_warning。移除已废弃的
ActiveRecord::ConnectionAdapters::ConnectionPool#connection。移除已废弃的对向
cache_dump_filename传递数据库名称的支持。移除已废弃的对设置
ENV["SCHEMA_CACHE"]的支持。
8.2. 弃用
- 废弃
SQLite3Adapter的retries选项,转而使用timeout。
8.3. 显著变更
- 在全新的数据库上运行
db:migrate现在会在运行迁移之前加载模式。后续调用将运行待处理的迁移。(如果需要从头运行迁移而不是加载模式文件的旧行为,可以通过运行db:migrate:reset来实现,这*将在运行迁移之前删除并重新创建数据库*)。
9. Active Storage
有关详细更改,请参阅变更日志。
9.1. 移除
9.2. 弃用
- 废弃 Active Storage 的 Azure 后端。
9.3. 显著变更
10. Active Model
有关详细更改,请参阅变更日志。
10.1. 移除
10.2. 弃用
10.3. 显著变更
11. Active Support
有关详细更改,请参阅变更日志。
11.1. 移除
移除已废弃的
ActiveSupport::ProxyObject。移除已废弃的对使用
@前缀设置attr_internal_naming_format的支持。移除已废弃的对向
ActiveSupport::Deprecation#warn传递字符串数组的支持。
11.2. 弃用
废弃
Benchmark.ms。废弃
Time和ActiveSupport::TimeWithZone之间的加法和since方法。
11.3. 显著变更
12. Active Job
有关详细更改,请参阅变更日志。
12.1. 移除
- 移除已废弃的
config.active_job.use_big_decimal_serializer。
12.2. 弃用
废弃
enqueue_after_transaction_commit。废弃内部
SuckerPunch适配器,转而使用sucker_punchgem 中包含的适配器。
12.3. 显著变更
13. Action Text
有关详细更改,请参阅变更日志。
13.1. 移除
13.2. 弃用
13.3. 显著变更
14. Action Mailbox
有关详细更改,请参阅变更日志。
14.1. 移除
14.2. 弃用
14.3. 显著变更
15. Ruby on Rails 指南
有关详细更改,请参阅变更日志。
15.1. 显著变更
16. 致谢
请参阅Rails 贡献者完整列表,感谢许多人花费大量时间使 Rails 成为一个稳定而健壮的框架。向他们所有人致敬。