1 升级到 Rails 6.1
如果您要升级现有应用程序,在进行升级之前拥有良好的测试覆盖率是一个好主意。您还应该先升级到 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_length
table_name_length
columns_per_table
indexes_per_table
columns_per_multicolumn_index
sql_query_length
joins_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
中的已弃用方法。fetch
each
first
values
[]=
移除已弃用的
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
,以便在数据库fixture中生成<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成为稳定而强大的框架的许多人。感谢他们所有人的贡献。