Upgrading activejob 7 to 8
Breaking7.2.4 → 8.1.4Breaking98Security20Platform1Deprecated31New306Changed203Fixed401Other84
SecurityLimits the size of strings ActiveModel::Type::Integer will coerce with to_i to avoid a DoS vector.Advisory ↗
BreakingUpgrade verdict
78 breaking changes and a platform requirement change and 20 security fixes.
In plain terms
- Some image types can no longer be resized or measured by Active Storage because their libvips handlers are disabled.
- Code that passed a Time object to Time#since no longer works and must be updated.
- Benchmark.ms is no longer provided by Active Support; use the benchmark gem instead.
- Adding a Time to an ActiveSupport::TimeWithZone no longer works as before.
Must act Top 5 of 124 that need code or config changes
Ruby requirement changed in 8.0.0.beta1: >= 3.1.0 → >= 3.2.0.
What you must change
Breaking78
Variant transformation of BMP, ICO, and PSD attachments now raises Vips::Error, and analysis of SVG, JPEG XL, JPEG 2000, and Netpbm no longer records width and height.
Vips::Errorconfig.active_storage.variable_content_typesRemoves deprecated support for passing a Time object to Time#since.
Time#sinceRemoves the deprecated Benchmark.ms method, now defined in the benchmark gem.
Benchmark.msRemoves deprecated addition of Time instances with ActiveSupport::TimeWithZone.
TimeActiveSupport::TimeWithZoneRemoves deprecated support for to_time preserving the system local time; it now always preserves the receiver timezone.
to_timeRemoves deprecated :unsigned_float and :unsigned_decimal column methods for MySQL.
:unsigned_float:unsigned_decimalRemoves the deprecated :retries option for the SQLite3 adapter.
:retriesRemoves autocomplete="off" on hidden inputs generated by form_tag, token_tag, method_tag, button_to, check_box, select and file_field.
form_tagtoken_tagmethod_tagbutton_tocheck_boxselectfile_fieldRemoves deprecated support for mapping a route to multiple paths.
Removes deprecated support for using semicolons as a query string separator.
ActionDispatch::QueryParser.each_pairRemoves deprecated support for skipping leading brackets in parameter names in the parameter parser.
ActionDispatch::ParamBuilder.from_query_stringThe JSON renderer no longer escapes HTML entities or Unicode line separators by default.
render json:escapeconfig.action_controller.escape_json_responsescallbackRemoves support for setting ActiveJob::Base.enqueue_after_transaction_commit to :never, :always and :default.
ActiveJob::Base.enqueue_after_transaction_commitRemoves the deprecated Rails.application.config.active_job.enqueue_after_transaction_commit setting.
Rails.application.config.active_job.enqueue_after_transaction_commitRemoves the deprecated
:azure storage service.:azureRemoves deprecated
STATS_DIRECTORIES.STATS_DIRECTORIESRemoves the deprecated
bin/rake stats command.bin/rake statsRemoves the deprecated
rails/console/methods.rb file.rails/console/methods.rbRails no longer generates a bin/bundle binstub when creating new applications.
bin/bundleRemove deprecated passing a Time object to Time#since.
Time#sinceRemove deprecated Benchmark.ms method.
Benchmark.msbenchmarkRemove deprecated addition for Time instances with ActiveSupport::TimeWithZone.
TimeActiveSupport::TimeWithZoneRemove deprecated support for to_time to preserve the system local time.
to_timeremote_ip will no longer ignore IPs in X-Forwarded-For headers if they are accompanied by port information.
remote_ipRemove deprecated STATS_DIRECTORIES.
STATS_DIRECTORIESRemove deprecated bin/rake stats command.
Remove deprecated rails/console/methods.rb file.
rails/console/methods.rbRemove deprecated :unsigned_float and :unsigned_decimal column methods for MySQL.
:unsigned_float:unsigned_decimalRemove deprecated :retries option for the SQLite3 adapter.
:retriesModel generator no longer needs a database connection to validate column types.
PoolConfig no longer keeps a reference to the connection class.
Remove autocomplete="off" on hidden inputs generated by form_tag, token_tag, method_tag, and the hidden parameter fields included in button_to forms will omit the autocomplete="off" attribute.
autocomplete="off"form_tagtoken_tagmethod_tagbutton_toRemove deprecated support to a route to multiple paths.
Remove deprecated support for using semicolons as a query string separator.
Remove deprecated support to skipping over leading brackets in parameter names in the parameter parser.
Remove support to set ActiveJob::Base.enqueue_after_transaction_commit to :never, :always and :default.
ActiveJob::Base.enqueue_after_transaction_commit:never:always:defaultRemove deprecated Rails.application.config.active_job.enqueue_after_transaction_commit.
Rails.application.config.active_job.enqueue_after_transaction_commitRemove deprecated :azure storage service.
:azureRemove unnecessary calls to the GCP metadata server.
A Blob will no longer autosave associated Attachment.
Remove unnecessary ruby-version input from ruby/setup-ruby.
ruby-versionruby/setup-rubyRails no longer generates a bin/bundle binstub when creating new applications.
bin/bundleRemoves deprecated support for passing an array of strings to ActiveSupport::Deprecation#warn.
ActiveSupport::Deprecation#warnActiveSupport::ProxyObjectRemoves deprecated support for setting attr_internal_naming_format with a @ prefix.
attr_internal_naming_formatRemoves the deprecated ActiveSupport::ProxyObject class.
ActiveSupport::ProxyObjectRemoves deprecated support for setting ENV["SCHEMA_CACHE"].
ENV["SCHEMA_CACHE"]Removes deprecated support for passing a database name to cache_dump_filename.
cache_dump_filenameRemoves deprecated ActiveRecord::ConnectionAdapters::ConnectionPool#connection.
ActiveRecord::ConnectionAdapters::ConnectionPool#connectionRemoves deprecated config.active_record.warn_on_records_fetched_greater_than.
config.active_record.warn_on_records_fetched_greater_thanRemoves deprecated support for defining enum with keyword arguments.
enumRemoves deprecated support for finding database adapters that are not registered to Active Record.
Removes deprecated config.active_record.allow_deprecated_singular_associations_name.
config.active_record.allow_deprecated_singular_associations_nameRemoves deprecated config.active_record.commit_transaction_on_non_local_return.
config.active_record.commit_transaction_on_non_local_returnRemoves deprecated support for passing content to void tag elements on the tag builder.
tagRemoves deprecated support for passing nil to the model: argument of form_with.
form_withnilmodel:Removes Rails.application.config.action_controller.allow_deprecated_parameters_hash_equality.
Rails.application.config.action_controller.allow_deprecated_parameters_hash_equalityRemoves deprecated
config.active_job.use_big_decimal_serializer.config.active_job.use_big_decimal_serializerRemoves deprecated support for extending the Rails console through Rails::ConsoleMethods.
Rails::ConsoleMethodsRemoves the deprecated file rails/console/helpers.
rails/console/helpersrails/console/appRemoves deprecated config.active_record.sqlite3_deprecated_warning.
config.active_record.sqlite3_deprecated_warningDeletes the deprecated constant ActiveRecord::ImmutableRelation.
ActiveRecord::ImmutableRelationRemoves deprecated config.read_encrypted_secrets.
config.read_encrypted_secretsThe db:prepare task no longer loads seeds when a non-primary database is created.
db:prepareseedstruefalseRemove deprecated config.active_record.sqlite3_deprecated_warning.
config.active_record.sqlite3_deprecated_warningRemove deprecated config.read_encrypted_secrets.
config.read_encrypted_secretsDrop MySQL 5.5 support.
Delete the deprecated constant ActiveRecord::ImmutableRelation.
ActiveRecord::ImmutableRelationRename text_area methods into textarea.
text_areatextarearich_text_arearich_textareaRename check_box* methods into checkbox*.
check_box*checkbox*Remove racc dependency by manually writing ActionDispatch::Journey::Scanner.
raccActionDispatch::Journey::ScannerRemove require_* statements from application.css to align with the transition from Sprockets to Propshaft.
require_*require_treerequire_selfapplication.cssUse Solid Cable as the default Action Cable adapter in production, configured as a separate queue database in config/database.yml.
Solid Cableconfig/database.ymlAlways clears CurrentAttributes instances, abandoning them at request end and creating a new instance on the next request.
CurrentAttributesMakes :class_name invalid in polymorphic belongs_to associations.
class_namebelongs_toRaises AbstractController::DoubleRenderError when head is called after rendering.
AbstractController::DoubleRenderErrorheadRemoves the deprecated internal SuckerPunch adapter in favor of the adapter included with the sucker_punch gem.
SuckerPunchSkip calling PG::Connection#cancel in cancel_any_running_query when using libpq >= 18 with pg < 1.6.0, due to incompatibility.
PG::Connection#cancelcancel_any_running_queryRemove deprecated internal SuckerPunch adapter in favor of the adapter included with the sucker_punch gem.
SuckerPunchsucker_punchSecurity20
Limits the size of strings ActiveModel::Type::Integer will coerce with to_i to avoid a DoS vector.
ActiveModel::Type::Integerto_iFilters the database password out of failed db: task command error messages.
Rejects malformed hosts with extra ports in ActionDispatch::HostAuthorization.
ActionDispatch::HostAuthorizationFixes possible XSS in DebugExceptions middleware.
DebugExceptionsAttributes filtered by filter_attributes are now also filtered by filter_parameters to avoid leaking sensitive information.
filter_attributesfilter_parametersRate limits password resets in the authentication generator to mitigate abuse.
Disables libvips unfuzzed image loaders and savers via Vips.block_untrusted(true) at boot, raising Vips::Error for affected formats.
Vips.block_untrusted(true)Vips::Errorconfig.active_storage.variable_content_types:mini_magickRejects scientific notation in NumberConverter.
NumberConverterFixes SafeBuffer#% to preserve unsafe status.
SafeBuffer#%Improves performance of NumberToDelimitedConverter.
NumberToDelimitedConverterSkips blank attribute names in tag helpers to avoid generating invalid HTML.
Filters user supplied metadata in DirectUploadController.
DirectUploadControllerAdds a configurable maximum streaming chunk size, defaulting to 100mb byte ranges for blobs.
Limits range requests to a single range.
Prevents path traversal in DiskService; path_for raises InvalidKeyError for dot segments or paths outside the storage root.
DiskServiceDiskService#path_forInvalidKeyErrorDiskControllerPrevents glob injection in DiskService#delete_prefixed by escaping glob metacharacters before Dir.glob.
DiskService#delete_prefixedDir.globCalls inspect on ids in RecordNotFound error to address CVE-2025-55193.
RecordNotFoundRemoves dangerous transformations to address CVE-2025-24293.
Adds validation to content security policies to disallow spaces and semicolons.
Sets Regexp.timeout to 1 second by default to improve security against Regexp Denial-of-Service attacks.
Regexp.timeoutPlatform1
Requires libvips 8.13 and ruby-vips 2.2.1 minimums, raising RuntimeError at boot when ruby-vips is installed and unmet.
libvipsruby-vipsRuntimeErrorDeprecations to plan for
Deprecated25
Deprecates config.active_support.to_time_preserves_timezone.
config.active_support.to_time_preserves_timezoneDeprecates String#mb_chars and ActiveSupport::Multibyte::Chars.
String#mb_charsActiveSupport::Multibyte::CharsDeprecates ActiveSupport::Configurable.
ActiveSupport::ConfigurableDeprecates using
insert_all/upsert_all with unpersisted records in associations.insert_allupsert_allDeprecates
update_all with WITH, WITH RECURSIVE or DISTINCT statements, which will raise an error in a future release.update_alldelete_allDeprecates
Rails.application.config.action_dispatch.ignore_leading_brackets.Rails.application.config.action_dispatch.ignore_leading_bracketsDeprecates the built-in sidekiq adapter in favor of the adapter in the sidekiq gem 7.3.3 or later.
sidekiqDeprecate config.active_support.to_time_preserves_timezone.
config.active_support.to_time_preserves_timezoneDeprecate String#mb_chars and ActiveSupport::Multibyte::Chars.
String#mb_charsActiveSupport::Multibyte::CharsDeprecate ActiveSupport::Configurable.
ActiveSupport::ConfigurableDeprecate using insert_all/upsert_all with unpersisted records in associations.
insert_allupsert_allDeprecate usage of unsupported methods in conjunction with update_all.
update_allWITHDISTINCTdelete_allDeprecate Rails.application.config.action_dispatch.ignore_leading_brackets.
Rails.application.config.action_dispatch.ignore_leading_bracketsDeprecate built-in sidekiq adapter.
sidekiqDeprecates the Benchmark.ms core extension because the benchmark gem becomes bundled in Ruby 3.5.
Benchmark.msDeprecates addition and since between two Time and ActiveSupport::TimeWithZone instances, to be removed in Rails 8.1.
TimeActiveSupport::TimeWithZonesince10.days.ago.since(10.days.ago)Deprecates unsigned_float and unsigned_decimal short-hand column methods.
unsigned_floatunsigned_decimalDeprecates drawing routes with multiple paths to make routing faster.
with_optionsgetDeprecates
sucker_punch as an adapter option.sucker_punchadapter: asyncDeprecates bin/rake stats in favor of bin/rails stats.
bin/rake statsbin/rails statsDeprecates
ActiveStorage::Service::AzureStorageService.ActiveStorage::Service::AzureStorageServiceDeprecates the ::STATS_DIRECTORIES constant in favor of Rails::CodeStatistics.register_directory.
STATS_DIRECTORIESRails::CodeStatistics.register_directoryDeprecate Benchmark.ms core extension.
Benchmark.msbenchmarkDeprecate ActiveStorage::Service::AzureStorageService.
ActiveStorage::Service::AzureStorageServiceDeprecate ::STATS_DIRECTORIES.
::STATS_DIRECTORIESSTATS_DIRECTORIESRails::CodeStatistics.register_directoryRails::CodeStatistics.register_directory(label, path)