当前位置: 首页 > news >正文

[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!,则根据提示添加:
# 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)
 # 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等错误或警告

# config/application.rbconfig.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,可以看看这个博文。

http://www.lryc.cn/news/391544.html

相关文章:

  • 大模型日报 2024-07-04
  • 技术成神之路:设计模式(一)单例模式
  • 四、(3)补充beautifulsoup、re正则表达式、标签解析
  • Vscode快捷键崩溃
  • Spring Boot中的开发工具与插件推荐
  • qt6 获取百度地图(一)
  • overlap的uORF对TE的抑制程度为什么显著高于non-overlap的uORF
  • 面向高精度导航定位领域的UM980RTK定位模块
  • 145-四路16位125Msps AD FMC子卡模块
  • 服务器被劫持
  • 康姿百德磁性床垫好不好,效果怎么样靠谱吗
  • [吃瓜教程]南瓜书第5章神经网络
  • 装饰模式解析:基本概念和实例教程
  • 211.xv6——3(page tables)
  • yum使用报错:ImportError: /lib64/libxml2.so.2: file too short
  • 【Android面试八股文】你是怎么保证Android设备的时间与服务器时间同步的?(使用NTP和TrueTime方案)
  • 解决Python爬虫开发中的数据输出问题:确保正确生成CSV文件
  • SCI一区TOP|徒步优化算法(HOA)原理及实现【免费获取Matlab代码】
  • Android的activity广播无法接收,提示process gone or crashing原因有可能是那些?
  • 如何将等保2.0的要求融入日常安全运维实践中?
  • 51单片机嵌入式开发:STC89C52环境配置到点亮LED
  • 源代码加密:保护你的数字宝藏
  • Jackson库使用教程
  • 汉王、绘王签字版调用封装
  • 如何在TikTok上获得更多观看量:12个流量秘诀
  • vue模板语法v-html
  • 13 Redis-- 数据一致性模型、MySQL 和 Redis 的数据一致性
  • 启动Nuxt-hub-starter: Failed to initialize wrangler bindings proxy write EOF
  • 技术驱动旅游创新!深度解析景区导览小程序的地图渲染与AR导航技术
  • 二叉树之遍历