[ruby on rails]rails6.0升级6.1

1.准备工作

在开始升级过程之前,我们有一些建议的准备工作。

  • 升级的时候,最好一个版本一个版本升级,比如6.0到6.1再到7.0,不要一次从6.0到7.0
  • 至少80%的测试覆盖率,测试真的很重要,能确保升级快速完成。
  • 本地新开分支升级,测试全部跑过后,再合到staging环境让测试人员过一遍。
  • 可以通过使用RailsBump检查你的Gemfile.lock是否有不兼容之处。
  • 根据gemfile.lock把gemfile中的gem都固定原来版本,只升级rails,后续有精力再升级gem

2.Rails指南

查阅官方的Rails指南,并遵循你的应用程序所需的任何步骤,这一点很重要。

3. 升级

使用rails app:update进行升级

4. webpack

  • 6.0里是bin/webpack bin/webpack-dev-server命令
  • 6.1里使用rails webpacker:install命令会生成bin/webpacker bin/webpacker-dev-server命令,都保留即可
  • 使用rails webpacker:install命令还会更新package.json yarn.lock文件,建议升级rails时不要更新,等升级完稳定后可以考虑升级

5.zeitwerk

  • Zeitwerk:如果你的应用程序仍然在经典模式下运行,你需要切换到zeitwerk模式。也没有设置自动加载模式的配置点,config.autoloader= 已经被删除。如果你把它设置为:zeitwerk ,只要把它删除即可。查看我们写的关于Zeitwerk升级的文章
  • 使用Rails.application.config.autoloader查看现在的模式
  • 使用rails zeitwerk:check检查是否需要添加appliaction.rb中的 config.eager_load_paths ,如果打印的不是All is good!,则根据提示添加:
ruby 复制代码
# config/application.rb
config.eager_load_paths << Rails.root.join('app', 'models', 'prod_readonly')
config.eager_load_paths << Rails.root.join('lib')

6.valid

  • record.errors[attribute] << message改为record.errors.add(attribute, :invalid, message)
ruby 复制代码
 # record.errors[attribute] << (options[:message] || '手机号格式错误')
   record.errors.add(attribute, :invalid, message: options[:message] || '手机号格式错误')    
 # record.errors[:owner] << '无法对自己的货品进行竞拍'
   record.errors.add(:owner, :invalid, message: '无法对自己的货品进行竞拍')
 # record.errors[:base] << '无法对自己的回流单创建订单'
   record.errors.add(:base, :invalid, message: '无法对自己的回流单创建订单')

7. 提示BigDecimal等错误或警告

ruby 复制代码
# config/application.rb
 config.active_record.yaml_column_permitted_classes = [
      Symbol, Date, Time, BigDecimal,
      ActiveSupport::TimeWithZone, ActiveSupport::TimeZone
    ]

6. 其他

  • Spring。如果你的应用程序使用Spring,它需要升级到至少3.0.0版本,否则你会得到undefined method 'mechanism=' for ActiveSupport::Dependencies:Module

  • Sprockets现在是一个可选的依赖项。Rails不再依赖sprockets-rails了。如果你的应用程序仍然需要使用Sprockets,你需要明确地添加该依赖关系。如果你想把你的javaScript代码从sprockets迁移到Webpacker,可以看看这个博文

相关推荐
会博通·代码搬运工8 分钟前
疾控档案落地难点:异构业务系统并存,高价值纸质凭证如何回流业务闭环
数据库·档案管理·档案管理系统·智能扫描设备·会博通
数智启示录10 分钟前
Apache Kafka Consumer 扩到 40 个仍不提速:Partition 上限锁死有效并行度 【Kafka合集】
数据库·经验分享·分布式·缓存·面试·kafka·apache
数智启示录17 分钟前
Apache Kafka 幂等 Producer 的边界:Exactly-Once 到了 MySQL 为什么失效 【Kafka合集】
数据库·经验分享·分布式·mysql·面试·kafka·apache
Java小白笔记19 分钟前
Java 实现阿里云 OSS 文件上传链路:普通上传、秒传、分片与断点续传
java·开发语言·数据库·spring·阿里云
—Miss. Z—20 分钟前
计算机三级数据库技术—填空题
数据库·mysql
yume_sibai26 分钟前
02-Rust 所有权与借用深入解析(底层原理 + 借用检查器 + 生命周期 + 内部可变性)
开发语言·后端·rust
卷无止境29 分钟前
从脚本到程序:Windows平台上的Python打包全景图
后端·python
骇客野人30 分钟前
Springboot 的 配置文件 application.yml 和 bootrap.yml 的由来和作用
java·spring boot·后端
岁月宁静44 分钟前
三、《从零手撸 Agent》 · system prompt 与核心参数:调好你的旋钮
后端·python·agent
数智启示录44 分钟前
Apache Kafka 同 Key 仍会乱序:从分区 Offset 到业务可见的四道边界 【Kafka 合集】
大数据·数据库·经验分享·分布式·面试·kafka·apache