更多内容请访问 rubyonrails.org:

Ruby on Rails 5.0 版本说明

Rails 5.0 中的亮点

  • Action Cable
  • Rails API
  • Active Record 属性 API
  • 测试运行器
  • 仅使用 rails CLI 而不是 Rake
  • Sprockets 3
  • Turbolinks 5
  • 需要 Ruby 2.2.2+

这些版本说明仅涵盖主要更改。要了解各种错误修复和更改,请参阅更改日志或查看 GitHub 上的 提交列表

1 升级到 Rails 5.0

如果您要升级现有应用程序,最好在开始之前拥有良好的测试覆盖率。您也应该先升级到 Rails 4.2(如果您尚未升级),并确保您的应用程序在尝试升级到 Rails 5.0 之前能够正常运行。在升级时需要注意的事项列表可以在 升级 Ruby on Rails 指南中找到。

2 主要功能

2.1 Action Cable

Action Cable 是 Rails 5 中的一个新框架。它将 WebSockets 无缝集成到您的 Rails 应用程序中。

Action Cable 允许使用 Ruby 编写实时功能,其风格和形式与您的 Rails 应用程序的其他部分相同,同时仍然保持高性能和可扩展性。它是一个全栈解决方案,提供客户端 JavaScript 框架和服务器端 Ruby 框架。您可以访问使用 Active Record 或您选择的 ORM 编写的完整域模型。

有关更多信息,请参阅 Action Cable 概述 指南。

2.2 API 应用程序

Rails 现在可以用来创建精简的仅 API 应用程序。这对于创建和提供类似于 XGitHub API 的 API 很有用,这些 API 可用于提供面向公众的 API 以及自定义应用程序。

您可以使用以下命令生成新的 api Rails 应用程序

$ rails new my_api --api

这将执行三项主要操作

  • 配置您的应用程序以使用比正常情况更有限的中间件集启动。具体来说,它默认情况下不会包含任何主要对浏览器应用程序有用的中间件(如 cookie 支持)。
  • 使 ApplicationController 继承自 ActionController::API 而不是 ActionController::Base。与中间件一样,这将省略任何 Action Controller 模块,这些模块提供主要由浏览器应用程序使用的功能。
  • 配置生成器,在您生成新资源时跳过生成视图、助手和资产。

该应用程序提供了一个 API 基础,然后可以 配置以引入功能,以适合应用程序的需求。

有关更多信息,请参阅 使用 Rails 构建仅 API 应用程序 指南。

2.3 Active Record 属性 API

在模型上定义具有类型的属性。如果需要,它将覆盖现有属性的类型。这允许控制在将值分配给模型时如何将其转换为 SQL 并从 SQL 中转换回来。它还会更改传递给 ActiveRecord::Base.where 的值的行为,这允许在 Active Record 的大部分地方使用我们的域对象,而无需依赖于实现细节或猴子补丁。

您可以使用它来实现以下一些功能

  • 可以覆盖 Active Record 检测到的类型。
  • 还可以提供默认值。
  • 属性不需要由数据库列支持。
# db/schema.rb
create_table :store_listings, force: true do |t|
  t.decimal :price_in_cents
  t.string :my_string, default: "original default"
end
# app/models/store_listing.rb
class StoreListing < ActiveRecord::Base
end
store_listing = StoreListing.new(price_in_cents: '10.1')

# before
store_listing.price_in_cents # => BigDecimal.new(10.1)
StoreListing.new.my_string # => "original default"

class StoreListing < ActiveRecord::Base
  attribute :price_in_cents, :integer # custom type
  attribute :my_string, :string, default: "new default" # default value
  attribute :my_default_proc, :datetime, default: -> { Time.now } # default value
  attribute :field_without_db_column, :integer, array: true
end

# after
store_listing.price_in_cents # => 10
StoreListing.new.my_string # => "new default"
StoreListing.new.my_default_proc # => 2015-05-30 11:04:48 -0600
model = StoreListing.new(field_without_db_column: ["1", "2", "3"])
model.attributes # => {field_without_db_column: [1, 2, 3]}

创建自定义类型

只要您的类型响应值类型上定义的方法,您就可以定义自己的自定义类型。方法 deserializecast 将在您的类型对象上调用,并使用来自数据库或控制器的原始输入。例如,当进行自定义转换(如 Money 数据)时,这很有用。

查询

当调用 ActiveRecord::Base.where 时,它将使用模型类定义的类型将值转换为 SQL,并在您的类型对象上调用 serialize

这使对象能够指定在执行 SQL 查询时如何转换值。

脏跟踪

属性的类型可以更改执行脏跟踪的方式。

请参阅其 文档,以了解详细说明。

2.4 测试运行器

已引入新的测试运行器,以增强从 Rails 运行测试的功能。要使用此测试运行器,只需键入 bin/rails test

测试运行器灵感来自 RSpecminitest-reportersmaxitest 等。它包含以下一些值得注意的改进

  • 使用测试的行号运行单个测试。
  • 运行多个测试,并指向测试的行号。
  • 改进的错误消息,也方便重新运行失败的测试。
  • 使用 -f 选项快速失败,以便在发生错误时立即停止测试,而不是等待套件完成。
  • 使用 -d 选项将测试输出延迟到完整测试运行结束时。
  • 使用 -b 选项输出完整异常回溯。
  • 与 minitest 集成,以允许使用 -s 选项进行测试种子数据、使用 -n 选项按名称运行特定测试、使用 -v 选项获得更详细的输出等。
  • 彩色测试输出。

3 Railties

有关详细更改,请参阅 更改日志

3.1 移除

  • 移除了调试器支持,请改用 byebug。debugger 不受 Ruby 2.2 支持。(提交

  • 移除了已弃用的 test:alltest:all:db 任务。(提交

  • 移除了已弃用的 Rails::Rack::LogTailer。(提交

  • 移除了已弃用的 RAILS_CACHE 常量。(提交

  • 移除了已弃用的 serve_static_assets 配置。(提交

  • 移除了文档任务 doc:appdoc:railsdoc:guides。(提交

  • 从默认堆栈中移除了 Rack::ContentLength 中间件。(提交

3.2 弃用

  • 已弃用 config.static_cache_control,建议使用 config.public_file_server.headers。 (Pull Request)

  • 已弃用 config.serve_static_files,建议使用 config.public_file_server.enabled。 (Pull Request)

  • 已弃用 rails 任务命名空间中的任务,建议使用 app 命名空间。 (例如,rails:updaterails:template 任务分别重命名为 app:updateapp:template。) (Pull Request)

3.3 主要变化

  • 新增 Rails 测试运行器 bin/rails test。 (Pull Request)

  • 新生成的应用程序和插件会包含 Markdown 格式的 README.md 文件。 (commit, Pull Request)

  • 新增 bin/rails restart 任务,通过修改 tmp/restart.txt 文件重启 Rails 应用程序。 (Pull Request)

  • 新增 bin/rails initializers 任务,按 Rails 调用顺序打印所有已定义的初始值设定项。 (Pull Request)

  • 新增 bin/rails dev:cache 命令,用于在开发模式下启用或禁用缓存。 (Pull Request)

  • 新增 bin/update 脚本,自动更新开发环境。 (Pull Request)

  • 通过 bin/rails 代理 Rake 任务。 (Pull Request, Pull Request)

  • 新生成的应用程序在 Linux 和 macOS 上默认启用事件文件系统监控功能。可以通过向生成器传递 --skip-listen 参数来禁用此功能。 (commit, commit)

  • 生成应用程序时,可以使用环境变量 RAILS_LOG_TO_STDOUT 选择将日志记录到标准输出中。 (Pull Request)

  • 为新应用程序启用 HSTS,并包含 IncludeSubdomains 头。 (Pull Request)

  • 应用程序生成器会写入一个新的文件 config/spring.rb,用于告诉 Spring 监控其他常见文件。 (commit)

  • 新增 --skip-action-mailer 选项,用于在生成新应用程序时跳过 Action Mailer。 (Pull Request)

  • 删除 tmp/sessions 目录以及与其相关的清理 rake 任务。 (Pull Request)

  • 将脚手架生成器生成的 _form.html.erb 文件改为使用局部变量。 (Pull Request)

  • 在生产环境中禁用类自动加载。 (commit)

4 Action Pack

有关详细的更改内容,请参阅 变更日志

4.1 删除部分

  • 删除 ActionDispatch::Request::Utils.deep_munge。 (commit)

  • 删除 ActionController::HideActions。 (Pull Request)

  • 删除 respond_torespond_with 占位符方法,此功能已提取到 responders gem 中。 (commit)

  • 删除已弃用的断言文件。 (commit)

  • 删除 URL 帮助程序中已弃用的字符串键用法。 (commit)

  • 删除 *_path 帮助程序中已弃用的 only_path 选项。 (commit)

  • 删除已弃用的 NamedRouteCollection#helpers。 (commit)

  • 删除已弃用的使用 :to 选项定义路由,该选项不包含 # 的支持。 (commit)

  • 删除已弃用的 ActionDispatch::Response#to_ary。 (commit)

  • 删除已弃用的 ActionDispatch::Request#deep_munge。 (commit)

  • 删除已弃用的 ActionDispatch::Http::Parameters#symbolized_path_parameters。 (commit)

  • 删除控制器测试中已弃用的 use_route 选项。 (commit)

  • 删除 assignsassert_template。 这两个方法已提取到 rails-controller-testing gem 中。 (Pull Request)

4.2 弃用部分

  • 已弃用所有 *_filter 回调,建议使用 *_action 回调。 (Pull Request)

  • 已弃用 *_via_redirect 集成测试方法。 使用 follow_redirect! 手动在请求调用后执行相同操作。 (Pull Request)

  • 已弃用 AbstractController#skip_action_callback,建议使用单独的 skip_callback 方法。 (Pull Request)

  • 已弃用 render 方法的 :nothing 选项。 (Pull Request)

  • 已弃用将第一个参数作为 Hash 以及默认状态码传递给 head 方法。 (Pull Request)

  • 已弃用使用字符串或符号作为中间件类名。 使用类名代替。 (commit)

  • 已弃用通过常量访问 MIME 类型(例如,Mime::HTML)。 使用带符号的下标运算符代替(例如,Mime[:html])。 (Pull Request)

  • 已弃用 redirect_to :back,建议使用 redirect_back,它接受一个必需的 fallback_location 参数,从而消除了出现 RedirectBackError 的可能性。 (Pull Request)

  • ActionDispatch::IntegrationTestActionController::TestCase 弃用位置参数,建议使用关键字参数。 (Pull Request)

  • 已弃用 :controller:action 路径参数。 (Pull Request)

  • 已弃用控制器实例上的 env 方法。 (commit)

  • ActionDispatch::ParamsParser 已弃用,并已从中间件堆栈中删除。 要配置参数解析器,请使用 ActionDispatch::Request.parameter_parsers=。 (commit, commit)

4.3 主要变化

  • 新增 ActionController::Renderer,用于在控制器操作之外渲染任意模板。 (Pull Request)

  • ActionController::TestCaseActionDispatch::Integration HTTP 请求方法迁移到关键字参数语法。 (Pull Request)

  • 在 Action Controller 中新增 http_cache_forever,以便我们可以缓存永远不会过期的响应。 (Pull Request)

  • 提供更友好的请求变体访问方式。 (Pull Request)

  • 对于没有对应模板的操作,渲染 head :no_content 而不是引发错误。 (Pull Request)

  • 新增了为控制器覆盖默认表单生成器的能力。 (Pull Request)

  • 新增了对仅 API 应用的支持。 ActionController::API 被添加为这类应用程序中 ActionController::Base 的替代品。 (Pull Request)

  • 使 ActionController::Parameters 不再继承自 HashWithIndifferentAccess。 (Pull Request)

  • 通过使 config.force_sslconfig.ssl_options 的尝试更加安全且更容易禁用,使它们更容易选择加入。 (Pull Request)

  • 新增了将任意头返回到 ActionDispatch::Static 的能力。 (Pull Request)

  • protect_from_forgery 的默认前缀更改为 false。 (commit)

  • ActionController::TestCase 将在 Rails 5.1 中移到其自己的 gem 中。 使用 ActionDispatch::IntegrationTest 代替。 (commit)

  • Rails 默认情况下生成弱 ETag。 (Pull Request)

  • 没有显式 render 调用且没有对应模板的控制器操作将隐式渲染 head :no_content 而不是引发错误。 (Pull Request 1, 2)

  • 新增了对每个表单 CSRF 令牌的选项。 (Pull Request)

  • 在集成测试中新增了请求编码和响应解析。 (Pull Request)

  • 新增 ActionController#helpers 以在控制器级别访问视图上下文。 (Pull Request)

  • 在将闪存消息存储到会话之前,会删除已弃用的闪存消息。 (Pull Request)

  • 新增了对将记录集合传递给 fresh_whenstale? 的支持。 (Pull Request)

  • ActionController::Live 成为一个 ActiveSupport::Concern。 这意味着它不能仅仅包含在其他模块中而不对它们进行 ActiveSupport::Concern 扩展,否则 ActionController::Live 在生产环境中将不起作用。 有些人可能正在使用另一个模块来包含一些特殊的 Warden/Devise 身份验证失败处理代码,因为中间件无法捕获由已生成线程抛出的 :warden,而这是使用 ActionController::Live 的情况。 (此问题中有更多详细信息)

  • 引入 Response#strong_etag=#weak_etag=,以及 fresh_whenstale? 的类似选项。 (Pull Request)

5 Action View

有关详细的更改内容,请参阅 变更日志

5.1 删除部分

  • 删除已弃用的 AbstractController::Base::parent_prefixes。 (commit)

  • 删除 ActionView::Helpers::RecordTagHelper,此功能已提取到 record_tag_helper gem 中。 (Pull Request)

  • 删除 translate 帮助程序的 :rescue_format 选项,因为它不再受 I18n 支持。 (Pull Request)

5.2 主要变化

  • 将默认模板处理程序从 ERB 更改为 Raw。 (commit)

  • 集合渲染可以缓存并一次获取多个部分。 (Pull Request, commit)

  • 在显式依赖项中新增了通配符匹配。 (Pull Request)

  • 使disable_with成为提交标签的默认行为。在提交时禁用按钮以防止重复提交。(Pull Request

  • 局部模板名称不再需要是有效的 Ruby 标识符。(commit

  • datetime_tag 帮助程序现在生成类型为 datetime-local 的输入标签。(Pull Request

  • 使用render partial: 帮助程序渲染时允许使用块。(Pull Request

6 Action Mailer

有关详细更改,请参阅 Changelog

6.1 移除

  • 已移除电子邮件视图中已弃用的*_path 帮助程序。(commit

  • 已移除已弃用的deliverdeliver! 方法。(commit

6.2 重要更改

  • 模板查找现在会尊重默认语言环境和 I18n 回退。(commit

  • 通过生成器创建的邮件程序添加了_mailer 后缀,遵循控制器和作业中使用的相同命名约定。(Pull Request

  • 添加了assert_enqueued_emailsassert_no_enqueued_emails。(Pull Request

  • 添加了config.action_mailer.deliver_later_queue_name 配置以设置邮件程序队列名称。(Pull Request

  • 添加了对 Action Mailer 视图中片段缓存的支持。添加了新的配置选项config.action_mailer.perform_caching 来确定您的模板是否应该执行缓存。(Pull Request

7 Active Record

有关详细更改,请参阅 Changelog

7.1 移除

  • 已移除允许将嵌套数组作为查询值传递的已弃用行为。(Pull Request

  • 已移除已弃用的ActiveRecord::Tasks::DatabaseTasks#load_schema。此方法已由ActiveRecord::Tasks::DatabaseTasks#load_schema_for 替换。(commit

  • 已移除已弃用的serialized_attributes。(commit

  • 已移除已弃用的has_many :through 上的自动计数器缓存。(commit

  • 已移除已弃用的sanitize_sql_hash_for_conditions。(commit

  • 已移除已弃用的Reflection#source_macro。(commit

  • 已移除已弃用的symbolized_base_classsymbolized_sti_name。(commit

  • 已移除已弃用的ActiveRecord::Base.disable_implicit_join_references=。(commit

  • 已移除使用字符串访问器访问连接规范的已弃用支持。(commit

  • 已移除预加载实例依赖关联的已弃用支持。(commit

  • 已移除使用排他性下界的 PostgreSQL 范围的已弃用支持。(commit

  • 已移除使用缓存的 Arel 修改关系时的弃用警告。这将引发ImmutableRelation 错误。(commit

  • 已移除核心中的ActiveRecord::Serialization::XmlSerializer。此功能已提取到 activemodel-serializers-xml gem 中。(Pull Request

  • 已移除核心中的对 legacy mysql 数据库适配器的支持。大多数用户应该能够使用mysql2。当我们找到维护者时,它将被转换为一个单独的 gem。(Pull Request 1Pull Request 2

  • 已移除对protected_attributes gem 的支持。(commit

  • 已移除对低于 9.1 版本的 PostgreSQL 的支持。(Pull Request

  • 已移除对activerecord-deprecated_finders gem 的支持。(commit

  • 已移除ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES 常量。(commit

7.2 弃用

  • 已弃用在查询中将类作为值传递。用户应该传递字符串。(Pull Request

  • 已弃用将false 作为一种停止 Active Record 回调链的方式。推荐的方式是throw(:abort)。(Pull Request

  • 已弃用ActiveRecord::Base.errors_in_transactional_callbacks=。(commit

  • 已弃用Relation#uniq,请使用Relation#distinct 代替。(commit

  • 已弃用 PostgreSQL 中的:point 类型,改为使用新的类型,该类型将返回Point 对象而不是Array (Pull Request

  • 已弃用通过传递一个真值参数到关联方法来强制关联重新加载。(Pull Request

  • 已弃用关联restrict_dependent_destroy 错误的键,改为使用新的键名。(Pull Request

  • 同步#tables 的行为。(Pull Request

  • 已弃用SchemaCache#tablesSchemaCache#table_exists?SchemaCache#clear_table_cache!,改为使用新的数据源对应方法。(Pull Request

  • 已弃用 SQLite3 和 MySQL 适配器上的connection.tables。(Pull Request

  • 已弃用将参数传递给#tables - 一些适配器(mysql2、sqlite3)的#tables 方法将返回表和视图,而其他适配器(postgresql)只返回表。为了使它们的行为一致,#tables 将来只返回表。(Pull Request

  • 已弃用table_exists? - #table_exists? 方法将检查表和视图。为了使它们的行为与#tables 一致,#table_exists? 将来只检查表。(Pull Request

  • 已弃用将offset 参数发送到find_nth。请使用关系上的offset 方法代替。(Pull Request

  • 已弃用DatabaseStatements 中的{insert|update|delete}_sql。请使用{insert|update|delete} 公共方法代替。(Pull Request

  • 已弃用use_transactional_fixtures,改为使用use_transactional_tests 以便更清楚。(Pull Request

  • 已弃用将列传递给ActiveRecord::Connection#quote。(commit

  • 添加了一个end 选项到find_in_batches,作为start 参数的补充,指定批处理处理的停止位置。(Pull Request

7.3 重要更改

  • 在创建表时,添加了referencesforeign_key 选项。(commit

  • 新的属性 API。(commit

  • enum 定义中添加了:_prefix/:_suffix 选项。(Pull RequestPull Request

  • 添加了ActiveRecord::Relation#cache_key。(Pull Request

  • timestamps 的默认null 值更改为false。(commit

  • 添加了ActiveRecord::SecureToken,以便使用SecureRandom 封装在模型中为属性生成唯一令牌的功能。(Pull Request

  • drop_table 添加了:if_exists 选项。(Pull Request

  • 添加了ActiveRecord::Base#accessed_fields,当您只想从数据库中选择所需数据时,可以使用它来快速发现从模型中读取了哪些字段。(commit

  • ActiveRecord::Relation 上添加了#or 方法,允许使用 OR 运算符组合 WHERE 或 HAVING 子句。(commit

  • 添加了ActiveRecord::Base.suppress 以防止接收器在给定块期间被保存。(Pull Request

  • belongs_to 现在默认情况下将在关联不存在时触发验证错误。您可以在每个关联的基础上使用optional: true 关闭它。同时弃用belongs_to 中的required 选项,改为使用optional。(Pull Request

  • 添加了config.active_record.dump_schemas 来配置db:structure:dump 的行为。(Pull Request

  • 添加了config.active_record.warn_on_records_fetched_greater_than 选项。(Pull Request

  • 在 MySQL 中添加了原生 JSON 数据类型支持。(Pull Request

  • 添加了对在 PostgreSQL 中并发删除索引的支持。(Pull Request

  • 在连接适配器上添加了#views#view_exists? 方法。(Pull Request

  • 添加了ActiveRecord::Base.ignored_columns,以使某些列在 Active Record 中不可见。(Pull Request

  • 添加了connection.data_sourcesconnection.data_source_exists?。这些方法确定哪些关系可以用来支持 Active Record 模型(通常是表和视图)。(Pull Request

  • 允许 fixture 文件在 YAML 文件本身中设置模型类。(Pull Request

  • 添加了在生成数据库迁移时默认使用uuid 作为主键的能力。(Pull Request

  • 添加了ActiveRecord::Relation#left_joinsActiveRecord::Relation#left_outer_joins。(Pull Request

  • 添加了after_{create,update,delete}_commit 回调。(Pull Request

  • 对迁移类公开的 API 进行版本控制,这样我们就可以更改参数默认值,而不会破坏现有的迁移,或者迫使它们通过弃用周期进行重写。(拉取请求)

  • ApplicationRecord 是所有应用程序模型的新超类,类似于应用程序控制器子类化 ApplicationController 而不是 ActionController::Base。这使应用程序可以获得一个单独的位置来配置应用程序范围的模型行为。(拉取请求)

  • 添加了 ActiveRecord #second_to_last#third_to_last 方法。(拉取请求)

  • 添加了为 PostgreSQL & MySQL 数据库对象(表、列、索引)添加注释的功能,这些注释存储在数据库元数据中。(拉取请求)

  • mysql2 适配器添加了预备语句支持,适用于 mysql2 0.4.4+。以前,这仅在已弃用的 mysql 遗留适配器上受支持。若要启用,请在 config/database.yml 中设置 prepared_statements: true。(拉取请求)

  • 添加了对关系对象调用 ActiveRecord::Relation#update 的功能,这将在关系中的所有对象上运行验证和回调。(拉取请求)

  • save 方法添加了 :touch 选项,以便可以保存记录而不更新时间戳。(拉取请求)

  • 为 PostgreSQL 添加了表达式索引和操作符类支持。(提交)

  • 添加了 :index_errors 选项,用于将索引添加到嵌套属性的错误中。(拉取请求)

  • 添加了对双向销毁依赖的支持。(拉取请求)

  • 添加了对事务性测试中 after_commit 回调的支持。(拉取请求)

  • 添加了 foreign_key_exists? 方法,用于查看表上是否存在外键。(拉取请求)

  • touch 方法添加了 :time 选项,用于使用不同于当前时间的不同时间来触碰记录。(拉取请求)

  • 更改事务回调以不吞并错误。在进行此更改之前,在事务回调中引发的任何错误都会被捕获并在日志中打印,除非你使用(现在已弃用)的 raise_in_transactional_callbacks = true 选项。

    现在,这些错误不再被捕获,而是直接冒泡,与其他回调的行为一致。(提交)

8 Active Model

请参阅 变更日志,了解详细的更改内容。

8.1 删除内容

8.2 弃用内容

  • 弃用返回 false 作为停止 Active Model 和 ActiveModel::Validations 回调链的方法。推荐的方法是 throw(:abort)。(拉取请求)

  • 弃用 ActiveModel::Errors#getActiveModel::Errors#setActiveModel::Errors#[]= 方法,这些方法的行为不一致。(拉取请求)

  • 弃用 validates_length_of:tokenizer 选项,建议使用纯 Ruby。(拉取请求)

  • 弃用 ActiveModel::Errors#add_on_emptyActiveModel::Errors#add_on_blank,没有替代方案。(拉取请求)

8.3 值得注意的更改

  • 添加了 ActiveModel::Errors#details,用于确定哪个验证器失败。(拉取请求)

  • 提取了 ActiveRecord::AttributeAssignmentActiveModel::AttributeAssignment,允许将其用作可包含模块,用于任何对象。(拉取请求)

  • 添加了 ActiveModel::Dirty#[attr_name]_previously_changed?ActiveModel::Dirty#[attr_name]_previous_change,以改进在模型保存后访问记录的更改。(拉取请求)

  • 一次性在 valid?invalid? 上验证多个上下文。(拉取请求)

  • 更改 validates_acceptance_of 以接受 true 作为默认值,除了 1 之外。(拉取请求)

9 Active Job

请参阅 变更日志,了解详细的更改内容。

9.1 值得注意的更改

  • ActiveJob::Base.deserialize 将委托给作业类。这允许作业在序列化时附加任意元数据,并在执行时将其读回。(拉取请求)

  • 添加了按作业配置队列适配器,而不会相互影响。(拉取请求)

  • 现在,生成的作业默认继承自 app/jobs/application_job.rb。(拉取请求)

  • 允许 DelayedJobSidekiqququequeue_classic 将作业 ID 报告回 ActiveJob::Base 作为 provider_job_id。(拉取请求拉取请求提交)

  • 实现了一个简单的 AsyncJob 处理器和相关的 AsyncAdapter,它们将作业排队到 concurrent-ruby 线程池。(拉取请求)

  • 将默认适配器从内联更改为异步。这是更好的默认值,因为测试将不再错误地依赖于同步发生的 behavior。(提交)

10 Active Support

请参阅 变更日志,了解详细的更改内容。

10.1 删除内容

  • 删除了已弃用的 ActiveSupport::JSON::Encoding::CircularReferenceError。(提交)

  • 删除了已弃用的方法 ActiveSupport::JSON::Encoding.encode_big_decimal_as_string=ActiveSupport::JSON::Encoding.encode_big_decimal_as_string。(提交)

  • 删除了已弃用的 ActiveSupport::SafeBuffer#prepend。(提交)

  • 删除了来自 Kernel 的已弃用方法。silence_stderrsilence_streamcapturequietly。(提交)

  • 删除了已弃用的 active_support/core_ext/big_decimal/yaml_conversions 文件。(提交)

  • 删除了已弃用的方法 ActiveSupport::Cache::Store.instrumentActiveSupport::Cache::Store.instrument=。(提交)

  • 删除了已弃用的 Class#superclass_delegating_accessor。改用 Class#class_attribute。(拉取请求)

  • 删除了已弃用的 ThreadSafe::Cache。改用 Concurrent::Map。(拉取请求)

  • 删除了 Object#itself,因为它在 Ruby 2.2 中已实现。(拉取请求)

10.2 弃用内容

  • 弃用 MissingSourceFile,建议使用 LoadError。(提交)

  • 弃用 alias_method_chain,建议使用 Ruby 2.0 中引入的 Module#prepend。(拉取请求)

  • 弃用 ActiveSupport::Concurrency::Latch,建议使用 concurrent-ruby 中的 Concurrent::CountDownLatch。(拉取请求)

  • 弃用 number_to_human_size:prefix 选项,没有替代方案。(拉取请求)

  • 弃用 Module#qualified_const_,建议使用内置的 Module#const_ 方法。(拉取请求)

  • 弃用传递字符串以定义回调。(拉取请求)

  • 弃用 ActiveSupport::Cache::Store#namespaced_keyActiveSupport::Cache::MemCachedStore#escape_keyActiveSupport::Cache::FileStore#key_file_path。改用 normalize_key。(拉取请求提交)

  • 弃用 ActiveSupport::Cache::LocaleCache#set_cache_value,建议使用 write_cache_value。(拉取请求)

  • 弃用向 assert_nothing_raised 传递参数。(拉取请求)

  • 弃用 Module.local_constants,建议使用 Module.constants(false)。(拉取请求)

10.3 值得注意的更改

  • ActiveSupport::MessageVerifier 添加了 #verified#valid_message? 方法。(拉取请求)

  • 更改了回调链停止的方式。从现在开始,停止回调链的首选方法是显式地 throw(:abort)。(拉取请求)

  • 新的配置选项 config.active_support.halt_callback_chains_on_return_false 用于指定 ActiveRecord、ActiveModel 和 ActiveModel::Validations 回调链是否可以通过在“before”回调中返回 false 来停止。(拉取请求)

  • 将默认测试顺序从 :sorted 更改为 :random。(提交)

  • DateTimeDateTime 添加了 #on_weekend?#on_weekday?#next_weekday#prev_weekday 方法。(拉取请求拉取请求)

  • DateTimeDateTime#next_week#prev_week 添加了 same_time 选项。(拉取请求)

  • DateTimeDateTime 添加了 #prev_day#next_day,它们是 #yesterday#tomorrow 的对应方法。(拉取请求)

  • 添加了 SecureRandom.base58,用于生成随机的 base58 字符串。(提交)

  • ActiveSupport::TestCase 添加了 file_fixture。它提供了一种简单的机制来访问测试用例中的示例文件。(拉取请求)

  • EnumerableArray 上添加了 #without,以返回不包含指定元素的可枚举对象的副本。(拉取请求)

  • 添加了 ActiveSupport::ArrayInquirerArray#inquiry。(拉取请求)

  • 添加了 ActiveSupport::TimeZone#strptime,以允许像从给定时区解析时间一样解析时间。(提交)

  • 添加了 Integer#positive?Integer#negative? 查询方法,类似于 Integer#zero?。(提交)

  • ActiveSupport::OrderedOptions 获取方法添加了一个叹号版本,如果值为 .blank?,则会引发 KeyError。(拉取请求)

  • 添加了 Time.days_in_year,用于返回给定年份的日数,如果未提供参数,则返回当前年份的日数。(提交)

  • 添加了一个事件文件监视器,用于异步检测应用程序源代码、路由、区域设置等的更改。(拉取请求)

  • 添加了 thread_m/cattr_accessor/reader/writer 方法集,用于声明按线程存在的类和模块变量。(拉取请求)

  • 添加了 Array#second_to_lastArray#third_to_last 方法。(拉取请求)

  • 发布 `ActiveSupport::Executor` 和 `ActiveSupport::Reloader` API,允许组件和库管理并参与应用程序代码的执行和应用程序重新加载过程。(Pull Request)

  • `ActiveSupport::Duration` 现在支持 ISO8601 格式化和解析。(Pull Request)

  • 当 `parse_json_times` 启用时,`ActiveSupport::JSON.decode` 现在支持解析 ISO8601 本地时间。(Pull Request)

  • `ActiveSupport::JSON.decode` 现在为日期字符串返回 `Date` 对象。(Pull Request)

  • 添加了 `TaggedLogging` 的功能,允许多次实例化日志记录器,以便它们不相互共享标签。(Pull Request)

11 致谢

查看Rails 贡献者完整列表,感谢所有花费无数时间使 Rails 成为稳定可靠框架的人。向他们致敬。



返回顶部