1. 升级到 Rails 6.1
如果您正在升级现有应用程序,最好在开始之前做好充分的测试覆盖。如果您尚未升级到 Rails 6.0,则应首先升级到 Rails 6.0,并确保您的应用程序在尝试更新到 Rails 6.1 之前仍按预期运行。在升级 Ruby on Rails 指南中列出了升级时需要注意的事项。
2. 主要特性
2.1. 每个数据库连接切换
Rails 6.1 提供了按数据库切换连接的功能。在 6.0 中,如果您切换到 reading 角色,那么所有数据库连接也会切换到 reading 角色。现在在 6.1 中,如果您在配置中将 legacy_connection_handling 设置为 false,Rails 将允许您通过在相应的抽象类上调用 connected_to 来切换单个数据库的连接。
2.2. 水平分片
Rails 6.0 提供了功能分区(多个分区,不同模式)数据库的功能,但无法支持水平分片(相同模式,多个分区)。Rails 无法支持水平分片,因为 Active Record 中的模型每个类每个角色只能有一个连接。现在这个问题已经修复,并且水平分片与 Rails 一起可用。
2.3. 严格加载关联
严格加载关联允许您确保所有关联都急切加载,并在 N+1 问题发生之前阻止它们。
2.4. 委托类型
委托类型是单表继承的替代方案。这有助于表示类层次结构,允许超类是一个由自己的表表示的具体类。每个子类都有自己的表用于额外的属性。
2.5. 异步销毁关联
异步销毁关联增加了应用程序在后台作业中 destroy 关联的功能。这有助于您在销毁数据时避免应用程序中的超时和其他性能问题。
3. Railties
有关详细更改,请参阅变更日志。
3.1. 移除
删除已弃用的
rake notes任务。删除
rails dbconsole命令中已弃用的connection选项。从
rails notes中删除对已弃用的SOURCE_ANNOTATION_DIRECTORIES环境变量的支持。删除 rails server 命令中已弃用的
server参数。删除已弃用的通过使用
HOST环境变量指定服务器 IP 的支持。删除已弃用的
rake dev:cache任务。删除已弃用的
rake routes任务。删除已弃用的
rake initializers任务。
3.2. 弃用
3.3. 显著变更
4. Action Cable
有关详细更改,请参阅变更日志。
4.1. 移除
4.2. 弃用
4.3. 显著变更
5. Action Pack
有关详细更改,请参阅变更日志。
5.1. 移除
删除已弃用的
ActionDispatch::Http::ParameterFilter。删除控制器级别已弃用的
force_ssl。
5.2. 弃用
- 弃用
config.action_dispatch.return_only_media_type_on_content_type。
5.3. 显著变更
- 将
ActionDispatch::Response#content_type更改为返回完整的 Content-Type 标头。
6. Action View
有关详细更改,请参阅变更日志。
6.1. 移除
从
ActionView::Template::Handlers::ERB中删除已弃用的escape_whitelist。从
ActionView::Resolver中删除已弃用的find_all_anywhere。从
ActionView::Template::HTML中删除已弃用的formats。从
ActionView::Template::RawFile中删除已弃用的formats。从
ActionView::Template::Text中删除已弃用的formats。从
ActionView::PathSet中删除已弃用的find_file。从
ActionView::LookupContext中删除已弃用的rendered_format。从
ActionView::ViewPaths中删除已弃用的find_file。删除对将不是
ActionView::LookupContext的对象作为ActionView::Base#initialize的第一个参数传递的支持。删除
ActionView::Base#initialize中已弃用的format参数。删除已弃用的
ActionView::Template#refresh。删除已弃用的
ActionView::Template#original_encoding。删除已弃用的
ActionView::Template#variants。删除已弃用的
ActionView::Template#formats。删除已弃用的
ActionView::Template#virtual_path=。删除已弃用的
ActionView::Template#updated_at。删除
ActionView::Template#initialize中必需的已弃用updated_at参数。删除已弃用的
ActionView::Template.finalize_compiled_template_methods。删除已弃用的
config.action_view.finalize_compiled_template_methods删除对使用块调用
ActionView::ViewPaths#with_fallback的已弃用支持。删除对将绝对路径传递给
render template:的已弃用支持。删除对将相对路径传递给
render file:的已弃用支持。删除对不接受两个参数的模板处理程序的旧支持。
删除
ActionView::Template::PathResolver中已弃用的模式参数。删除对在某些视图助手中从对象调用私有方法的已弃用支持。
6.2. 弃用
6.3. 显著变更
要求
ActionView::Base子类实现#compiled_method_container。使
ActionView::Template#initialize中的locals参数成为必需项。javascript_include_tag和stylesheet_link_tag资源助手会生成一个link头部,它为现代浏览器提供有关预加载资源的提示。这可以通过将config.action_view.preload_links_header设置为false来禁用。
7. Action Mailer
有关详细更改,请参阅变更日志。
7.1. 移除
- 删除已弃用的
ActionMailer::Base.receive,转而使用 Action Mailbox。
7.2. 弃用
7.3. 显著变更
8. Active Record
有关详细更改,请参阅变更日志。
8.1. 移除
从
ActiveRecord::ConnectionAdapters::DatabaseLimits中删除已弃用的方法。column_name_lengthtable_name_lengthcolumns_per_tableindexes_per_tablecolumns_per_multicolumn_indexsql_query_lengthjoins_per_query删除已弃用的
ActiveRecord::ConnectionAdapters::AbstractAdapter#supports_multi_insert?。删除已弃用的
ActiveRecord::ConnectionAdapters::AbstractAdapter#supports_foreign_keys_in_create?。删除已弃用的
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#supports_ranges?。删除已弃用的
ActiveRecord::Base#update_attributes和ActiveRecord::Base#update_attributes!。删除
ActiveRecord::ConnectionAdapter::SchemaStatements#assume_migrated_upto_version中已弃用的migrations_path参数。删除已弃用的
config.active_record.sqlite3.represent_boolean_as_integer。从
ActiveRecord::DatabaseConfigurations中删除已弃用的方法。fetcheachfirstvalues[]=删除已弃用的
ActiveRecord::Result#to_hash方法。删除对在
ActiveRecord::Relation方法中使用不安全原始 SQL 的已弃用支持。
8.2. 弃用
弃用
ActiveRecord::Base.allow_unsafe_raw_sql。弃用
connected_to上的database关键字参数。当
legacy_connection_handling设置为 false 时,弃用connection_handlers。
8.3. 显著变更
MySQL:唯一性验证器现在尊重默认数据库排序规则,不再默认强制区分大小写比较。
relation.create不再在初始化块和回调中将作用域泄漏到类级别查询方法。之前
User.where(name: "John").create do |john| User.find_by(name: "David") # => nil end之后
User.where(name: "John").create do |john| User.find_by(name: "David") # => #<User name: "David", ...> end命名作用域链不再将作用域泄漏到类级别查询方法。
class User < ActiveRecord::Base scope :david, -> { User.where(name: "David") } end之前
User.where(name: "John").david # SELECT * FROM users WHERE name = 'John' AND name = 'David'之后
User.where(name: "John").david # SELECT * FROM users WHERE name = 'David'where.not现在生成 NAND 谓词而不是 NOR。之前
User.where.not(name: "Jon", role: "admin") # SELECT * FROM users WHERE name != 'Jon' AND role != 'admin'之后
User.where.not(name: "Jon", role: "admin") # SELECT * FROM users WHERE NOT (name = 'Jon' AND role = 'admin')要使用新的每个数据库连接处理应用程序,必须将
legacy_connection_handling更改为 false,并删除connection_handlers上已弃用的访问器。connects_to和connected_to的公共方法无需更改。
9. Active Storage
有关详细更改,请参阅变更日志。
9.1. 移除
删除对将
:combine_options操作传递给ActiveStorage::Transformers::ImageProcessing的已弃用支持。删除已弃用的
ActiveStorage::Transformers::MiniMagickTransformer。删除已弃用的
config.active_storage.queue。删除已弃用的
ActiveStorage::Downloading。
9.2. 弃用
- 弃用
Blob.create_after_upload,转而使用Blob.create_and_upload。(拉取请求)
9.3. 显著变更
- 添加
Blob.create_and_upload以创建新 blob 并将给定io上传到服务。(拉取请求) - 添加了
ActiveStorage::Blob#service_name列。升级后需要运行迁移。运行bin/rails app:update以生成该迁移。
10. Active Model
有关详细更改,请参阅变更日志。
10.1. 移除
10.2. 弃用
10.3. 显著变更
- Active Model 的错误现在是具有接口的对象,允许您的应用程序更轻松地处理和与模型抛出的错误进行交互。此功能包括查询接口、更精确的测试以及访问错误详细信息。
11. Active Support
有关详细更改,请参阅变更日志。
11.1. 移除
当
config.i18n.fallbacks为空时,删除已弃用的回退到I18n.default_locale。删除已弃用的
LoggerSilence常量。删除已弃用的
ActiveSupport::LoggerThreadSafeLevel#after_initialize。删除已弃用的
Module#parent_name、Module#parent和Module#parents。删除已弃用的文件
active_support/core_ext/module/reachable。删除已弃用的文件
active_support/core_ext/numeric/inquiry。删除已弃用的文件
active_support/core_ext/array/prepend_and_append。删除已弃用的文件
active_support/core_ext/hash/compact。删除已弃用的文件
active_support/core_ext/hash/transform_values。删除已弃用的文件
active_support/core_ext/range/include_range。删除已弃用的
ActiveSupport::Multibyte::Chars#consumes?和ActiveSupport::Multibyte::Chars#normalize。删除已弃用的
ActiveSupport::Multibyte::Unicode.pack_graphemes、ActiveSupport::Multibyte::Unicode.unpack_graphemes、ActiveSupport::Multibyte::Unicode.normalize、ActiveSupport::Multibyte::Unicode.downcase、ActiveSupport::Multibyte::Unicode.upcase和ActiveSupport::Multibyte::Unicode.swapcase。删除已弃用的
ActiveSupport::Notifications::Instrumenter#end=。
11.2. 弃用
- 弃用
ActiveSupport::Multibyte::Unicode.default_normalization_form。
11.3. 显著变更
12. Active Job
有关详细更改,请参阅变更日志。
12.1. 移除
12.2. 弃用
- 弃用
config.active_job.return_false_on_aborted_enqueue。
12.3. 显著变更
- 当作业入队被中止时返回
false。
13. Action Text
有关详细更改,请参阅变更日志。
13.1. 移除
13.2. 弃用
13.3. 显著变更
通过在富文本属性名称后添加
?来添加确认富文本内容是否存在的方法。(拉取请求)添加
fill_in_rich_text_area系统测试用例助手,用于查找 trix 编辑器并用给定的 HTML 内容填充它。(拉取请求)添加
ActionText::FixtureSet.attachment以在数据库 fixtures 中生成<action-text-attachment>元素。(拉取请求)
14. Action Mailbox
有关详细更改,请参阅变更日志。
14.1. 移除
14.2. 弃用
- 弃用
Rails.application.credentials.action_mailbox.api_key和MAILGUN_INGRESS_API_KEY,转而使用Rails.application.credentials.action_mailbox.signing_key和MAILGUN_INGRESS_SIGNING_KEY。
14.3. 显著变更
15. Ruby on Rails 指南
有关详细更改,请参阅变更日志。
15.1. 显著变更
16. 致谢
请参阅Rails 贡献者完整列表,感谢许多人花费大量时间使 Rails 成为一个稳定而健壮的框架。向他们所有人致敬。