Development of Rails 8.0 starts now

🎉
This commit is contained in:
Rafael Mendonça França 2024-05-13 16:44:50 +00:00
parent a6e2bb04dd
commit 37fd0e7fe4
No known key found for this signature in database
GPG Key ID: FC23B6D0F1EEE948
58 changed files with 522 additions and 236 deletions

2
.github/stale.yml vendored

@ -20,7 +20,7 @@ markComment: >
The resources of the Rails team are limited, and so we are asking for your help. The resources of the Rails team are limited, and so we are asking for your help.
If you can still reproduce this error on the `7-1-stable` branch or on `main`, If you can still reproduce this error on the `7-2-stable` branch or on `main`,
please reply with all of the information you have about it in order to keep the issue open. please reply with all of the information you have about it in order to keep the issue open.
Thank you for all your contributions. Thank you for all your contributions.

@ -27,29 +27,29 @@ GIT
PATH PATH
remote: . remote: .
specs: specs:
actioncable (7.2.0.alpha) actioncable (8.0.0.alpha)
actionpack (= 7.2.0.alpha) actionpack (= 8.0.0.alpha)
activesupport (= 7.2.0.alpha) activesupport (= 8.0.0.alpha)
nio4r (~> 2.0) nio4r (~> 2.0)
websocket-driver (>= 0.6.1) websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6) zeitwerk (~> 2.6)
actionmailbox (7.2.0.alpha) actionmailbox (8.0.0.alpha)
actionpack (= 7.2.0.alpha) actionpack (= 8.0.0.alpha)
activejob (= 7.2.0.alpha) activejob (= 8.0.0.alpha)
activerecord (= 7.2.0.alpha) activerecord (= 8.0.0.alpha)
activestorage (= 7.2.0.alpha) activestorage (= 8.0.0.alpha)
activesupport (= 7.2.0.alpha) activesupport (= 8.0.0.alpha)
mail (>= 2.8.0) mail (>= 2.8.0)
actionmailer (7.2.0.alpha) actionmailer (8.0.0.alpha)
actionpack (= 7.2.0.alpha) actionpack (= 8.0.0.alpha)
actionview (= 7.2.0.alpha) actionview (= 8.0.0.alpha)
activejob (= 7.2.0.alpha) activejob (= 8.0.0.alpha)
activesupport (= 7.2.0.alpha) activesupport (= 8.0.0.alpha)
mail (>= 2.8.0) mail (>= 2.8.0)
rails-dom-testing (~> 2.2) rails-dom-testing (~> 2.2)
actionpack (7.2.0.alpha) actionpack (8.0.0.alpha)
actionview (= 7.2.0.alpha) actionview (= 8.0.0.alpha)
activesupport (= 7.2.0.alpha) activesupport (= 8.0.0.alpha)
nokogiri (>= 1.8.5) nokogiri (>= 1.8.5)
racc racc
rack (>= 2.2.4) rack (>= 2.2.4)
@ -58,35 +58,35 @@ PATH
rails-dom-testing (~> 2.2) rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6) rails-html-sanitizer (~> 1.6)
useragent (~> 0.16) useragent (~> 0.16)
actiontext (7.2.0.alpha) actiontext (8.0.0.alpha)
actionpack (= 7.2.0.alpha) actionpack (= 8.0.0.alpha)
activerecord (= 7.2.0.alpha) activerecord (= 8.0.0.alpha)
activestorage (= 7.2.0.alpha) activestorage (= 8.0.0.alpha)
activesupport (= 7.2.0.alpha) activesupport (= 8.0.0.alpha)
globalid (>= 0.6.0) globalid (>= 0.6.0)
nokogiri (>= 1.8.5) nokogiri (>= 1.8.5)
actionview (7.2.0.alpha) actionview (8.0.0.alpha)
activesupport (= 7.2.0.alpha) activesupport (= 8.0.0.alpha)
builder (~> 3.1) builder (~> 3.1)
erubi (~> 1.11) erubi (~> 1.11)
rails-dom-testing (~> 2.2) rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6) rails-html-sanitizer (~> 1.6)
activejob (7.2.0.alpha) activejob (8.0.0.alpha)
activesupport (= 7.2.0.alpha) activesupport (= 8.0.0.alpha)
globalid (>= 0.3.6) globalid (>= 0.3.6)
activemodel (7.2.0.alpha) activemodel (8.0.0.alpha)
activesupport (= 7.2.0.alpha) activesupport (= 8.0.0.alpha)
activerecord (7.2.0.alpha) activerecord (8.0.0.alpha)
activemodel (= 7.2.0.alpha) activemodel (= 8.0.0.alpha)
activesupport (= 7.2.0.alpha) activesupport (= 8.0.0.alpha)
timeout (>= 0.4.0) timeout (>= 0.4.0)
activestorage (7.2.0.alpha) activestorage (8.0.0.alpha)
actionpack (= 7.2.0.alpha) actionpack (= 8.0.0.alpha)
activejob (= 7.2.0.alpha) activejob (= 8.0.0.alpha)
activerecord (= 7.2.0.alpha) activerecord (= 8.0.0.alpha)
activesupport (= 7.2.0.alpha) activesupport (= 8.0.0.alpha)
marcel (~> 1.0) marcel (~> 1.0)
activesupport (7.2.0.alpha) activesupport (8.0.0.alpha)
base64 base64
bigdecimal bigdecimal
concurrent-ruby (~> 1.0, >= 1.0.2) concurrent-ruby (~> 1.0, >= 1.0.2)
@ -95,23 +95,23 @@ PATH
i18n (>= 1.6, < 2) i18n (>= 1.6, < 2)
minitest (>= 5.1, < 5.22.0) minitest (>= 5.1, < 5.22.0)
tzinfo (~> 2.0, >= 2.0.5) tzinfo (~> 2.0, >= 2.0.5)
rails (7.2.0.alpha) rails (8.0.0.alpha)
actioncable (= 7.2.0.alpha) actioncable (= 8.0.0.alpha)
actionmailbox (= 7.2.0.alpha) actionmailbox (= 8.0.0.alpha)
actionmailer (= 7.2.0.alpha) actionmailer (= 8.0.0.alpha)
actionpack (= 7.2.0.alpha) actionpack (= 8.0.0.alpha)
actiontext (= 7.2.0.alpha) actiontext (= 8.0.0.alpha)
actionview (= 7.2.0.alpha) actionview (= 8.0.0.alpha)
activejob (= 7.2.0.alpha) activejob (= 8.0.0.alpha)
activemodel (= 7.2.0.alpha) activemodel (= 8.0.0.alpha)
activerecord (= 7.2.0.alpha) activerecord (= 8.0.0.alpha)
activestorage (= 7.2.0.alpha) activestorage (= 8.0.0.alpha)
activesupport (= 7.2.0.alpha) activesupport (= 8.0.0.alpha)
bundler (>= 1.15.0) bundler (>= 1.15.0)
railties (= 7.2.0.alpha) railties (= 8.0.0.alpha)
railties (7.2.0.alpha) railties (8.0.0.alpha)
actionpack (= 7.2.0.alpha) actionpack (= 8.0.0.alpha)
activesupport (= 7.2.0.alpha) activesupport (= 8.0.0.alpha)
irb (~> 1.13) irb (~> 1.13)
rackup (>= 1.0.0) rackup (>= 1.0.0)
rake (>= 12.2) rake (>= 12.2)

@ -1 +1 @@
7.2.0.alpha 8.0.0.alpha

@ -18,4 +18,4 @@
*Sebastian Pöll*, *Junichi Sato* *Sebastian Pöll*, *Junichi Sato*
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/actioncable/CHANGELOG.md) for previous changes. Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/actioncable/CHANGELOG.md) for previous changes.

@ -9,8 +9,8 @@ def self.gem_version
end end
module VERSION module VERSION
MAJOR = 7 MAJOR = 8
MINOR = 2 MINOR = 0
TINY = 0 TINY = 0
PRE = "alpha" PRE = "alpha"

@ -1,6 +1,6 @@
{ {
"name": "@rails/actioncable", "name": "@rails/actioncable",
"version": "7.2.0-alpha", "version": "8.0.0-alpha",
"description": "WebSocket framework for Ruby on Rails.", "description": "WebSocket framework for Ruby on Rails.",
"module": "app/assets/javascripts/actioncable.esm.js", "module": "app/assets/javascripts/actioncable.esm.js",
"main": "app/assets/javascripts/actioncable.js", "main": "app/assets/javascripts/actioncable.js",

@ -3,4 +3,4 @@
*Chedli Bourguiba* *Chedli Bourguiba*
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/actionmailbox/CHANGELOG.md) for previous changes. Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/actionmailbox/CHANGELOG.md) for previous changes.

@ -7,8 +7,8 @@ def self.gem_version
end end
module VERSION module VERSION
MAJOR = 7 MAJOR = 8
MINOR = 2 MINOR = 0
TINY = 0 TINY = 0
PRE = "alpha" PRE = "alpha"

@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.2].define(version: 2018_02_12_164506) do ActiveRecord::Schema[8.0].define(version: 2018_02_12_164506) do
create_table "action_mailbox_inbound_emails", force: :cascade do |t| create_table "action_mailbox_inbound_emails", force: :cascade do |t|
t.integer "status", default: 0, null: false t.integer "status", default: 0, null: false
t.string "message_id", null: false t.string "message_id", null: false

@ -6,4 +6,4 @@
*Rafael Mendonça França* *Rafael Mendonça França*
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/actionmailer/CHANGELOG.md) for previous changes. Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/actionmailer/CHANGELOG.md) for previous changes.

@ -7,8 +7,8 @@ def self.gem_version
end end
module VERSION module VERSION
MAJOR = 7 MAJOR = 8
MINOR = 2 MINOR = 0
TINY = 0 TINY = 0
PRE = "alpha" PRE = "alpha"

@ -132,4 +132,4 @@
*Roque Pinel*, *Trevor Turk*, *tonytonyjan* *Roque Pinel*, *Trevor Turk*, *tonytonyjan*
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/actionpack/CHANGELOG.md) for previous changes. Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/actionpack/CHANGELOG.md) for previous changes.

@ -9,8 +9,8 @@ def self.gem_version
end end
module VERSION module VERSION
MAJOR = 7 MAJOR = 8
MINOR = 2 MINOR = 0
TINY = 0 TINY = 0
PRE = "alpha" PRE = "alpha"

@ -40,4 +40,4 @@
*Hartley McGuire* *Hartley McGuire*
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/actiontext/CHANGELOG.md) for previous changes. Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/actiontext/CHANGELOG.md) for previous changes.

@ -9,8 +9,8 @@ def self.gem_version
end end
module VERSION module VERSION
MAJOR = 7 MAJOR = 8
MINOR = 2 MINOR = 0
TINY = 0 TINY = 0
PRE = "alpha" PRE = "alpha"

@ -1,6 +1,6 @@
{ {
"name": "@rails/actiontext", "name": "@rails/actiontext",
"version": "7.2.0-alpha", "version": "8.0.0-alpha",
"description": "Edit and display rich text in Rails applications", "description": "Edit and display rich text in Rails applications",
"module": "app/assets/javascripts/actiontext.esm.js", "module": "app/assets/javascripts/actiontext.esm.js",
"main": "app/assets/javascripts/actiontext.js", "main": "app/assets/javascripts/actiontext.js",

@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.2].define(version: 2019_03_17_200724) do ActiveRecord::Schema[8.0].define(version: 2019_03_17_200724) do
create_table "action_text_rich_texts", force: :cascade do |t| create_table "action_text_rich_texts", force: :cascade do |t|
t.string "name", null: false t.string "name", null: false
t.text "body" t.text "body"

@ -94,4 +94,4 @@
*Akhil G Krishnan* *Akhil G Krishnan*
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/actionview/CHANGELOG.md) for previous changes. Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/actionview/CHANGELOG.md) for previous changes.

@ -7,8 +7,8 @@ def self.gem_version
end end
module VERSION module VERSION
MAJOR = 7 MAJOR = 8
MINOR = 2 MINOR = 0
TINY = 0 TINY = 0
PRE = "alpha" PRE = "alpha"

@ -62,4 +62,4 @@
*Rafael Mendonça França* *Rafael Mendonça França*
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/activejob/CHANGELOG.md) for previous changes. Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/activejob/CHANGELOG.md) for previous changes.

@ -7,8 +7,8 @@ def self.gem_version
end end
module VERSION module VERSION
MAJOR = 7 MAJOR = 8
MINOR = 2 MINOR = 0
TINY = 0 TINY = 0
PRE = "alpha" PRE = "alpha"

@ -19,4 +19,4 @@
*Jonathan Hefner* *Jonathan Hefner*
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/activemodel/CHANGELOG.md) for previous changes. Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/activemodel/CHANGELOG.md) for previous changes.

@ -7,8 +7,8 @@ def self.gem_version
end end
module VERSION module VERSION
MAJOR = 7 MAJOR = 8
MINOR = 2 MINOR = 0
TINY = 0 TINY = 0
PRE = "alpha" PRE = "alpha"

@ -815,4 +815,4 @@
*Myles Boone* *Myles Boone*
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/activerecord/CHANGELOG.md) for previous changes. Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/activerecord/CHANGELOG.md) for previous changes.

@ -139,7 +139,7 @@ A short rundown of some of the major features:
* Database agnostic schema management with Migrations. * Database agnostic schema management with Migrations.
class AddSystemSettings < ActiveRecord::Migration[7.2] class AddSystemSettings < ActiveRecord::Migration[8.0]
def up def up
create_table :system_settings do |t| create_table :system_settings do |t|
t.string :name t.string :name

@ -1928,7 +1928,7 @@ def belongs_to(name, scope = nil, **options)
# The join table should not have a primary key or a model associated with it. You must manually generate the # The join table should not have a primary key or a model associated with it. You must manually generate the
# join table with a migration such as this: # join table with a migration such as this:
# #
# class CreateDevelopersProjectsJoinTable < ActiveRecord::Migration[7.2] # class CreateDevelopersProjectsJoinTable < ActiveRecord::Migration[8.0]
# def change # def change
# create_join_table :developers, :projects # create_join_table :developers, :projects
# end # end

@ -348,7 +348,7 @@ def #{column_type}(*names, **options)
# Inside migration files, the +t+ object in {create_table}[rdoc-ref:SchemaStatements#create_table] # Inside migration files, the +t+ object in {create_table}[rdoc-ref:SchemaStatements#create_table]
# is actually of this type: # is actually of this type:
# #
# class SomeMigration < ActiveRecord::Migration[7.2] # class SomeMigration < ActiveRecord::Migration[8.0]
# def up # def up
# create_table :foo do |t| # create_table :foo do |t|
# puts t.class # => "ActiveRecord::ConnectionAdapters::TableDefinition" # puts t.class # => "ActiveRecord::ConnectionAdapters::TableDefinition"

@ -7,8 +7,8 @@ def self.gem_version
end end
module VERSION module VERSION
MAJOR = 7 MAJOR = 8
MINOR = 2 MINOR = 0
TINY = 0 TINY = 0
PRE = "alpha" PRE = "alpha"

@ -21,7 +21,7 @@ def initialize(message = nil)
# For example the following migration is not reversible. # For example the following migration is not reversible.
# Rolling back this migration will raise an ActiveRecord::IrreversibleMigration error. # Rolling back this migration will raise an ActiveRecord::IrreversibleMigration error.
# #
# class IrreversibleMigrationExample < ActiveRecord::Migration[7.2] # class IrreversibleMigrationExample < ActiveRecord::Migration[8.0]
# def change # def change
# create_table :distributors do |t| # create_table :distributors do |t|
# t.string :zipcode # t.string :zipcode
@ -39,7 +39,7 @@ def initialize(message = nil)
# #
# 1. Define <tt>#up</tt> and <tt>#down</tt> methods instead of <tt>#change</tt>: # 1. Define <tt>#up</tt> and <tt>#down</tt> methods instead of <tt>#change</tt>:
# #
# class ReversibleMigrationExample < ActiveRecord::Migration[7.2] # class ReversibleMigrationExample < ActiveRecord::Migration[8.0]
# def up # def up
# create_table :distributors do |t| # create_table :distributors do |t|
# t.string :zipcode # t.string :zipcode
@ -64,7 +64,7 @@ def initialize(message = nil)
# #
# 2. Use the #reversible method in <tt>#change</tt> method: # 2. Use the #reversible method in <tt>#change</tt> method:
# #
# class ReversibleMigrationExample < ActiveRecord::Migration[7.2] # class ReversibleMigrationExample < ActiveRecord::Migration[8.0]
# def change # def change
# create_table :distributors do |t| # create_table :distributors do |t|
# t.string :zipcode # t.string :zipcode
@ -250,7 +250,7 @@ def initialize
# #
# Example of a simple migration: # Example of a simple migration:
# #
# class AddSsl < ActiveRecord::Migration[7.2] # class AddSsl < ActiveRecord::Migration[8.0]
# def up # def up
# add_column :accounts, :ssl_enabled, :boolean, default: true # add_column :accounts, :ssl_enabled, :boolean, default: true
# end # end
@ -270,7 +270,7 @@ def initialize
# #
# Example of a more complex migration that also needs to initialize data: # Example of a more complex migration that also needs to initialize data:
# #
# class AddSystemSettings < ActiveRecord::Migration[7.2] # class AddSystemSettings < ActiveRecord::Migration[8.0]
# def up # def up
# create_table :system_settings do |t| # create_table :system_settings do |t|
# t.string :name # t.string :name
@ -399,7 +399,7 @@ def initialize
# $ bin/rails generate migration add_fieldname_to_tablename fieldname:string # $ bin/rails generate migration add_fieldname_to_tablename fieldname:string
# #
# This will generate the file <tt>timestamp_add_fieldname_to_tablename.rb</tt>, which will look like this: # This will generate the file <tt>timestamp_add_fieldname_to_tablename.rb</tt>, which will look like this:
# class AddFieldnameToTablename < ActiveRecord::Migration[7.2] # class AddFieldnameToTablename < ActiveRecord::Migration[8.0]
# def change # def change
# add_column :tablenames, :fieldname, :string # add_column :tablenames, :fieldname, :string
# end # end
@ -425,7 +425,7 @@ def initialize
# #
# Not all migrations change the schema. Some just fix the data: # Not all migrations change the schema. Some just fix the data:
# #
# class RemoveEmptyTags < ActiveRecord::Migration[7.2] # class RemoveEmptyTags < ActiveRecord::Migration[8.0]
# def up # def up
# Tag.all.each { |tag| tag.destroy if tag.pages.empty? } # Tag.all.each { |tag| tag.destroy if tag.pages.empty? }
# end # end
@ -438,7 +438,7 @@ def initialize
# #
# Others remove columns when they migrate up instead of down: # Others remove columns when they migrate up instead of down:
# #
# class RemoveUnnecessaryItemAttributes < ActiveRecord::Migration[7.2] # class RemoveUnnecessaryItemAttributes < ActiveRecord::Migration[8.0]
# def up # def up
# remove_column :items, :incomplete_items_count # remove_column :items, :incomplete_items_count
# remove_column :items, :completed_items_count # remove_column :items, :completed_items_count
@ -452,7 +452,7 @@ def initialize
# #
# And sometimes you need to do something in SQL not abstracted directly by migrations: # And sometimes you need to do something in SQL not abstracted directly by migrations:
# #
# class MakeJoinUnique < ActiveRecord::Migration[7.2] # class MakeJoinUnique < ActiveRecord::Migration[8.0]
# def up # def up
# execute "ALTER TABLE `pages_linked_pages` ADD UNIQUE `page_id_linked_page_id` (`page_id`,`linked_page_id`)" # execute "ALTER TABLE `pages_linked_pages` ADD UNIQUE `page_id_linked_page_id` (`page_id`,`linked_page_id`)"
# end # end
@ -469,7 +469,7 @@ def initialize
# <tt>Base#reset_column_information</tt> in order to ensure that the model has the # <tt>Base#reset_column_information</tt> in order to ensure that the model has the
# latest column data from after the new column was added. Example: # latest column data from after the new column was added. Example:
# #
# class AddPeopleSalary < ActiveRecord::Migration[7.2] # class AddPeopleSalary < ActiveRecord::Migration[8.0]
# def up # def up
# add_column :people, :salary, :integer # add_column :people, :salary, :integer
# Person.reset_column_information # Person.reset_column_information
@ -531,7 +531,7 @@ def initialize
# To define a reversible migration, define the +change+ method in your # To define a reversible migration, define the +change+ method in your
# migration like this: # migration like this:
# #
# class TenderloveMigration < ActiveRecord::Migration[7.2] # class TenderloveMigration < ActiveRecord::Migration[8.0]
# def change # def change
# create_table(:horses) do |t| # create_table(:horses) do |t|
# t.column :content, :text # t.column :content, :text
@ -561,7 +561,7 @@ def initialize
# can't execute inside a transaction though, and for these situations # can't execute inside a transaction though, and for these situations
# you can turn the automatic transactions off. # you can turn the automatic transactions off.
# #
# class ChangeEnum < ActiveRecord::Migration[7.2] # class ChangeEnum < ActiveRecord::Migration[8.0]
# disable_ddl_transaction! # disable_ddl_transaction!
# #
# def up # def up
@ -822,7 +822,7 @@ def execution_strategy
# and create the table 'apples' on the way up, and the reverse # and create the table 'apples' on the way up, and the reverse
# on the way down. # on the way down.
# #
# class FixTLMigration < ActiveRecord::Migration[7.2] # class FixTLMigration < ActiveRecord::Migration[8.0]
# def change # def change
# revert do # revert do
# create_table(:horses) do |t| # create_table(:horses) do |t|
@ -841,7 +841,7 @@ def execution_strategy
# #
# require_relative "20121212123456_tenderlove_migration" # require_relative "20121212123456_tenderlove_migration"
# #
# class FixupTLMigration < ActiveRecord::Migration[7.2] # class FixupTLMigration < ActiveRecord::Migration[8.0]
# def change # def change
# revert TenderloveMigration # revert TenderloveMigration
# #
@ -892,7 +892,7 @@ def down
# when the three columns 'first_name', 'last_name' and 'full_name' exist, # when the three columns 'first_name', 'last_name' and 'full_name' exist,
# even when migrating down: # even when migrating down:
# #
# class SplitNameMigration < ActiveRecord::Migration[7.2] # class SplitNameMigration < ActiveRecord::Migration[8.0]
# def change # def change
# add_column :users, :first_name, :string # add_column :users, :first_name, :string
# add_column :users, :last_name, :string # add_column :users, :last_name, :string
@ -920,7 +920,7 @@ def reversible
# In the following example, the new column +published+ will be given # In the following example, the new column +published+ will be given
# the value +true+ for all existing records. # the value +true+ for all existing records.
# #
# class AddPublishedToPosts < ActiveRecord::Migration[7.2] # class AddPublishedToPosts < ActiveRecord::Migration[8.0]
# def change # def change
# add_column :posts, :published, :boolean, default: false # add_column :posts, :published, :boolean, default: false
# up_only do # up_only do

@ -21,7 +21,7 @@ def self.find(version)
# New migration functionality that will never be backward compatible should be added directly to `ActiveRecord::Migration`. # New migration functionality that will never be backward compatible should be added directly to `ActiveRecord::Migration`.
# #
# There are classes for each prior Rails version. Each class descends from the *next* Rails version, so: # There are classes for each prior Rails version. Each class descends from the *next* Rails version, so:
# 5.2 < 6.0 < 6.1 < 7.0 < 7.1 < 7.2 # 5.2 < 6.0 < 6.1 < 7.0 < 7.1 < 7.2 < 8.0
# #
# If you are introducing new migration functionality that should only apply from Rails 7 onward, then you should # If you are introducing new migration functionality that should only apply from Rails 7 onward, then you should
# find the class that immediately precedes it (6.1), and override the relevant migration methods to undo your changes. # find the class that immediately precedes it (6.1), and override the relevant migration methods to undo your changes.
@ -29,7 +29,10 @@ def self.find(version)
# For example, Rails 6 added a default value for the `precision` option on datetime columns. So in this file, the `V5_2` # For example, Rails 6 added a default value for the `precision` option on datetime columns. So in this file, the `V5_2`
# class sets the value of `precision` to `nil` if it's not explicitly provided. This way, the default value will not apply # class sets the value of `precision` to `nil` if it's not explicitly provided. This way, the default value will not apply
# for migrations written for 5.2, but will for migrations written for 6.0. # for migrations written for 5.2, but will for migrations written for 6.0.
V7_2 = Current V8_0 = Current
class V7_2 < V8_0
end
class V7_1 < V7_2 class V7_1 < V7_2
end end

@ -503,7 +503,7 @@ def content_columns
# when just after creating a table you want to populate it with some default # when just after creating a table you want to populate it with some default
# values, e.g.: # values, e.g.:
# #
# class CreateJobLevels < ActiveRecord::Migration[7.2] # class CreateJobLevels < ActiveRecord::Migration[8.0]
# def up # def up
# create_table :job_levels do |t| # create_table :job_levels do |t|
# t.integer :id # t.integer :id

@ -71,4 +71,4 @@
*Yogesh Khater* *Yogesh Khater*
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/activestorage/CHANGELOG.md) for previous changes. Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/activestorage/CHANGELOG.md) for previous changes.

@ -7,8 +7,8 @@ def self.gem_version
end end
module VERSION module VERSION
MAJOR = 7 MAJOR = 8
MINOR = 2 MINOR = 0
TINY = 0 TINY = 0
PRE = "alpha" PRE = "alpha"

@ -1,6 +1,6 @@
{ {
"name": "@rails/activestorage", "name": "@rails/activestorage",
"version": "7.2.0-alpha", "version": "8.0.0-alpha",
"description": "Attach cloud and local files in Rails applications", "description": "Attach cloud and local files in Rails applications",
"module": "app/assets/javascripts/activestorage.esm.js", "module": "app/assets/javascripts/activestorage.esm.js",
"main": "app/assets/javascripts/activestorage.js", "main": "app/assets/javascripts/activestorage.js",

@ -230,4 +230,4 @@
*fatkodima* *fatkodima*
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/activesupport/CHANGELOG.md) for previous changes. Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/activesupport/CHANGELOG.md) for previous changes.

@ -68,7 +68,7 @@ def self._instance # :nodoc:
# and the second is a library name. # and the second is a library name.
# #
# ActiveSupport::Deprecation.new('2.0', 'MyLibrary') # ActiveSupport::Deprecation.new('2.0', 'MyLibrary')
def initialize(deprecation_horizon = "7.3", gem_name = "Rails") def initialize(deprecation_horizon = "8.1", gem_name = "Rails")
self.gem_name = gem_name self.gem_name = gem_name
self.deprecation_horizon = deprecation_horizon self.deprecation_horizon = deprecation_horizon
# By default, warnings are not silenced and debugging is off. # By default, warnings are not silenced and debugging is off.

@ -7,8 +7,8 @@ def self.gem_version
end end
module VERSION module VERSION
MAJOR = 7 MAJOR = 8
MINOR = 2 MINOR = 0
TINY = 0 TINY = 0
PRE = "alpha" PRE = "alpha"

@ -1,2 +1,2 @@
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/guides/CHANGELOG.md) for previous changes. Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/guides/CHANGELOG.md) for previous changes.

@ -0,0 +1,331 @@
**DO NOT READ THIS FILE ON GITHUB, GUIDES ARE PUBLISHED ON https://guides.rubyonrails.org.**
Ruby on Rails 8.0 Release Notes
===============================
Highlights in Rails 8.0:
--------------------------------------------------------------------------------
Upgrading to Rails 8.0
----------------------
If you're upgrading an existing application, it's a great idea to have good test
coverage before going in. You should also first upgrade to Rails 7.1 in case you
haven't and make sure your application still runs as expected before attempting
an update to Rails 8.0. A list of things to watch out for when upgrading is
available in the
[Upgrading Ruby on Rails](upgrading_ruby_on_rails.html#upgrading-from-rails-7-2-to-rails-8-0)
guide.
Major Features
--------------
Railties
--------
Please refer to the [Changelog][railties] for detailed changes.
### Removals
* Remove deprecated `Rails::Generators::Testing::Behaviour`.
* Remove deprecated `Rails.application.secrets`.
* Remove deprecated `Rails.config.enable_dependency_loading`.
* Remove deprecated `find_cmd_and_exec` console helper.
### Deprecations
### Notable changes
Action Cable
------------
Please refer to the [Changelog][action-cable] for detailed changes.
### Removals
### Deprecations
### Notable changes
Action Pack
-----------
Please refer to the [Changelog][action-pack] for detailed changes.
### Removals
* Remove deprecated constant `ActionDispatch::IllegalStateError`.
* Remove deprecated constant `AbstractController::Helpers::MissingHelperError`.
* Remove deprecated comparison between `ActionController::Parameters` and `Hash`.
* Remove deprecated `Rails.application.config.action_dispatch.return_only_request_media_type_on_content_type`.
* Remove deprecated `speaker`, `vibrate`, and `vr` permissions policy directives.
* Remove deprecated support to set `Rails.application.config.action_dispatch.show_exceptions` to `true` and `false`.
### Deprecations
* Deprecate `Rails.application.config.action_controller.allow_deprecated_parameters_hash_equality`.
### Notable changes
Action View
-----------
Please refer to the [Changelog][action-view] for detailed changes.
### Removals
* Remove deprecated `@rails/ujs` in favor of `Turbo`.
### Deprecations
* Deprecate passing content to void elements when using `tag.br` type tag builders.
### Notable changes
Action Mailer
-------------
Please refer to the [Changelog][action-mailer] for detailed changes.
### Removals
* Remove deprecated `config.action_mailer.preview_path`.
* Remove deprecated params via `:args` for `assert_enqueued_email_with`.
### Deprecations
### Notable changes
Active Record
-------------
Please refer to the [Changelog][active-record] for detailed changes.
### Removals
* Remove deprecated `Rails.application.config.active_record.suppress_multiple_database_warning`.
* Remove deprecated support to call `alias_attribute` with non-existent attribute names.
* Remove deprecated `name` argument from `ActiveRecord::Base.remove_connection`.
* Remove deprecated `ActiveRecord::Base.clear_active_connections!`.
* Remove deprecated `ActiveRecord::Base.clear_reloadable_connections!`.
* Remove deprecated `ActiveRecord::Base.clear_all_connections!`.
* Remove deprecated `ActiveRecord::Base.flush_idle_connections!`.
* Remove deprecated `ActiveRecord::ActiveJobRequiredError`.
* Remove deprecated support to define `explain` in the connection adapter with 2 arguments.
* Remove deprecated `ActiveRecord::LogSubscriber.runtime` method.
* Remove deprecated `ActiveRecord::LogSubscriber.runtime=` method.
* Remove deprecated `ActiveRecord::LogSubscriber.reset_runtime` method.
* Remove deprecated `ActiveRecord::Migration.check_pending` method.
* Remove deprecated support to passing `SchemaMigration` and `InternalMetadata` classes as arguments to
`ActiveRecord::MigrationContext`.
* Remove deprecated behavior to support referring to a singular association by its plural name.
* Remove deprecated `TestFixtures.fixture_path`.
* Remove deprecated support to `ActiveRecord::Base#read_attribute(:id)` to return the custom primary key value.
* Remove deprecated support to passing coder and class as second argument to `serialize`.
* Remove deprecated `#all_foreign_keys_valid?` from database adapters.
* Remove deprecated `ActiveRecord::ConnectionAdapters::SchemaCache.load_from`.
* Remove deprecated `ActiveRecord::ConnectionAdapters::SchemaCache#data_sources`.
* Remove deprecated `#all_connection_pools`.
* Remove deprecated support to apply `#connection_pool_list`, `#active_connections?`, `#clear_active_connections!`,
`#clear_reloadable_connections!`, `#clear_all_connections!` and `#flush_idle_connections!` to the connections pools
for the current role when the `role` argument isn't provided.
* Remove deprecated `ActiveRecord::ConnectionAdapters::ConnectionPool#connection_klass`.
* Remove deprecated `#quote_bound_value`.
* Remove deprecated support to quote `ActiveSupport::Duration`.
* Remove deprecated support to pass `deferrable: true` to `add_foreign_key`.
* Remove deprecated support to pass `rewhere` to `ActiveRecord::Relation#merge`.
* Remove deprecated behavior that would rollback a transaction block when exited using `return`, `break` or `throw`.
### Deprecations
* Deprecate `Rails.application.config.active_record.allow_deprecated_singular_associations_name`
* Deprecate `Rails.application.config.active_record.commit_transaction_on_non_local_return`
### Notable changes
Active Storage
--------------
Please refer to the [Changelog][active-storage] for detailed changes.
### Removals
* Remove deprecated `config.active_storage.replace_on_assign_to_many`.
* Remove deprecated `config.active_storage.silence_invalid_content_types_warning`.
### Deprecations
### Notable changes
Active Model
------------
Please refer to the [Changelog][active-model] for detailed changes.
### Removals
### Deprecations
### Notable changes
Active Support
--------------
Please refer to the [Changelog][active-support] for detailed changes.
### Removals
* Remove deprecated `ActiveSupport::Notifications::Event#children` and `ActiveSupport::Notifications::Event#parent_of?`.
* Remove deprecated support to call the following methods without passing a deprecator:
- `deprecate`
- `deprecate_constant`
- `ActiveSupport::Deprecation::DeprecatedObjectProxy.new`
- `ActiveSupport::Deprecation::DeprecatedInstanceVariableProxy.new`
- `ActiveSupport::Deprecation::DeprecatedConstantProxy.new`
- `assert_deprecated`
- `assert_not_deprecated`
- `collect_deprecations`
* Remove deprecated `ActiveSupport::Deprecation` delegation to instance.
* Remove deprecated `SafeBuffer#clone_empty`.
* Remove deprecated `#to_default_s` from `Array`, `Date`, `DateTime` and `Time`.
* Remove deprecated `:pool_size` and `:pool_timeout` options for the cache storage.
* Remove deprecated support for `config.active_support.cache_format_version = 6.1`.
* Remove deprecated constants `ActiveSupport::LogSubscriber::CLEAR` and `ActiveSupport::LogSubscriber::BOLD`.
* Remove deprecated support to bolding log text with positional boolean in `ActiveSupport::LogSubscriber#color`.
* Remove deprecated `config.active_support.disable_to_s_conversion`.
* Remove deprecated `config.active_support.remove_deprecated_time_with_zone_name`.
* Remove deprecated `config.active_support.use_rfc4122_namespaced_uuids`.
* Remove deprecated support to passing `Dalli::Client` instances to `MemCacheStore`.
* Remove deprecated support for the pre-Ruby 2.4 behavior of `to_time` returning a `Time` object with local timezone.
### Deprecations
* Deprecate `config.active_support.to_time_preserves_timezone`.
* Deprecate `DateAndTime::Compatibility.preserve_timezone`.
### Notable changes
Active Job
----------
Please refer to the [Changelog][active-job] for detailed changes.
### Removals
* Remove deprecated primitive serializer for `BigDecimal` arguments.
* Remove deprecated support to set numeric values to `scheduled_at` attribute.
* Remove deprecated `:exponentially_longer` value for the `:wait` in `retry_on`.
### Deprecations
* Deprecate `Rails.application.config.active_job.use_big_decimal_serialize`.
### Notable changes
Action Text
----------
Please refer to the [Changelog][action-text] for detailed changes.
### Removals
### Deprecations
### Notable changes
Action Mailbox
----------
Please refer to the [Changelog][action-mailbox] for detailed changes.
### Removals
### Deprecations
### Notable changes
Ruby on Rails Guides
--------------------
Please refer to the [Changelog][guides] for detailed changes.
### Notable changes
Credits
-------
See the
[full list of contributors to Rails](https://contributors.rubyonrails.org/)
for the many people who spent many hours making Rails, the stable and robust
framework it is. Kudos to all of them.
[railties]: https://github.com/rails/rails/blob/main/railties/CHANGELOG.md
[action-pack]: https://github.com/rails/rails/blob/main/actionpack/CHANGELOG.md
[action-view]: https://github.com/rails/rails/blob/main/actionview/CHANGELOG.md
[action-mailer]: https://github.com/rails/rails/blob/main/actionmailer/CHANGELOG.md
[action-cable]: https://github.com/rails/rails/blob/main/actioncable/CHANGELOG.md
[active-record]: https://github.com/rails/rails/blob/main/activerecord/CHANGELOG.md
[active-storage]: https://github.com/rails/rails/blob/main/activestorage/CHANGELOG.md
[active-model]: https://github.com/rails/rails/blob/main/activemodel/CHANGELOG.md
[active-support]: https://github.com/rails/rails/blob/main/activesupport/CHANGELOG.md
[active-job]: https://github.com/rails/rails/blob/main/activejob/CHANGELOG.md
[action-text]: https://github.com/rails/rails/blob/main/actiontext/CHANGELOG.md
[action-mailbox]: https://github.com/rails/rails/blob/main/actionmailbox/CHANGELOG.md
[guides]: https://github.com/rails/rails/blob/main/guides/CHANGELOG.md

@ -10,7 +10,7 @@
</p> </p>
<% else %> <% else %>
<p> <p>
These are the new guides for Rails 7.2 based on <a href="https://github.com/rails/rails/tree/<%= @version %>"><%= @version %></a>. These are the new guides for Rails 8.0 based on <a href="https://github.com/rails/rails/tree/<%= @version %>"><%= @version %></a>.
These guides are designed to make you immediately productive with Rails, and to help you understand how all of the pieces fit together. These guides are designed to make you immediately productive with Rails, and to help you understand how all of the pieces fit together.
</p> </p>
<% end %> <% end %>

@ -645,7 +645,7 @@ files which are executed against any database that Active Record supports.
Here's a migration that creates a new table called `publications`: Here's a migration that creates a new table called `publications`:
```ruby ```ruby
class CreatePublications < ActiveRecord::Migration[7.2] class CreatePublications < ActiveRecord::Migration[8.0]
def change def change
create_table :publications do |t| create_table :publications do |t|
t.string :title t.string :title

@ -36,7 +36,7 @@ You can create a table with a composite primary key by passing the
`:primary_key` option to `create_table` with an array value: `:primary_key` option to `create_table` with an array value:
```ruby ```ruby
class CreateProducts < ActiveRecord::Migration[7.2] class CreateProducts < ActiveRecord::Migration[8.0]
def change def change
create_table :products, primary_key: [:store_id, :sku] do |t| create_table :products, primary_key: [:store_id, :sku] do |t|
t.integer :store_id t.integer :store_id

@ -34,7 +34,7 @@ history to the latest version. Active Record will also update your
Here's an example of a migration: Here's an example of a migration:
```ruby ```ruby
class CreateProducts < ActiveRecord::Migration[7.2] class CreateProducts < ActiveRecord::Migration[8.0]
def change def change
create_table :products do |t| create_table :products do |t|
t.string :name t.string :name
@ -73,7 +73,7 @@ If you wish for a migration to do something that Active Record doesn't know how
to reverse, you can use `reversible`: to reverse, you can use `reversible`:
```ruby ```ruby
class ChangeProductsPrice < ActiveRecord::Migration[7.2] class ChangeProductsPrice < ActiveRecord::Migration[8.0]
def change def change
reversible do |direction| reversible do |direction|
change_table :products do |t| change_table :products do |t|
@ -92,7 +92,7 @@ passed to `direction.up` and `direction.down` respectively.
Alternatively, you can use `up` and `down` instead of `change`: Alternatively, you can use `up` and `down` instead of `change`:
```ruby ```ruby
class ChangeProductsPrice < ActiveRecord::Migration[7.2] class ChangeProductsPrice < ActiveRecord::Migration[8.0]
def up def up
change_table :products do |t| change_table :products do |t|
t.change :price, :string t.change :price, :string
@ -136,7 +136,7 @@ $ bin/rails generate migration AddPartNumberToProducts
This will create an appropriately named empty migration: This will create an appropriately named empty migration:
```ruby ```ruby
class AddPartNumberToProducts < ActiveRecord::Migration[7.2] class AddPartNumberToProducts < ActiveRecord::Migration[8.0]
def change def change
end end
end end
@ -160,7 +160,7 @@ $ bin/rails generate migration AddPartNumberToProducts part_number:string
This will generate the following migration: This will generate the following migration:
```ruby ```ruby
class AddPartNumberToProducts < ActiveRecord::Migration[7.2] class AddPartNumberToProducts < ActiveRecord::Migration[8.0]
def change def change
add_column :products, :part_number, :string add_column :products, :part_number, :string
end end
@ -176,7 +176,7 @@ $ bin/rails generate migration AddPartNumberToProducts part_number:string:index
This will generate the appropriate [`add_column`][] and [`add_index`][] statements: This will generate the appropriate [`add_column`][] and [`add_index`][] statements:
```ruby ```ruby
class AddPartNumberToProducts < ActiveRecord::Migration[7.2] class AddPartNumberToProducts < ActiveRecord::Migration[8.0]
def change def change
add_column :products, :part_number, :string add_column :products, :part_number, :string
add_index :products, :part_number add_index :products, :part_number
@ -194,7 +194,7 @@ Will generate a schema migration which adds two additional
columns to the `products` table. columns to the `products` table.
```ruby ```ruby
class AddDetailsToProducts < ActiveRecord::Migration[7.2] class AddDetailsToProducts < ActiveRecord::Migration[8.0]
def change def change
add_column :products, :part_number, :string add_column :products, :part_number, :string
add_column :products, :price, :decimal add_column :products, :price, :decimal
@ -213,7 +213,7 @@ $ bin/rails generate migration RemovePartNumberFromProducts part_number:string
This generates the appropriate [`remove_column`][] statements: This generates the appropriate [`remove_column`][] statements:
```ruby ```ruby
class RemovePartNumberFromProducts < ActiveRecord::Migration[7.2] class RemovePartNumberFromProducts < ActiveRecord::Migration[8.0]
def change def change
remove_column :products, :part_number, :string remove_column :products, :part_number, :string
end end
@ -233,7 +233,7 @@ $ bin/rails generate migration CreateProducts name:string part_number:string
generates generates
```ruby ```ruby
class CreateProducts < ActiveRecord::Migration[7.2] class CreateProducts < ActiveRecord::Migration[8.0]
def change def change
create_table :products do |t| create_table :products do |t|
t.string :name t.string :name
@ -261,7 +261,7 @@ $ bin/rails generate migration AddUserRefToProducts user:references
generates the following [`add_reference`][] call: generates the following [`add_reference`][] call:
```ruby ```ruby
class AddUserRefToProducts < ActiveRecord::Migration[7.2] class AddUserRefToProducts < ActiveRecord::Migration[8.0]
def change def change
add_reference :products, :user, foreign_key: true add_reference :products, :user, foreign_key: true
end end
@ -281,7 +281,7 @@ $ bin/rails generate migration CreateJoinTableCustomerProduct customer product
will produce the following migration: will produce the following migration:
```ruby ```ruby
class CreateJoinTableCustomerProduct < ActiveRecord::Migration[7.2] class CreateJoinTableCustomerProduct < ActiveRecord::Migration[8.0]
def change def change
create_join_table :customers, :products do |t| create_join_table :customers, :products do |t|
# t.index [:customer_id, :product_id] # t.index [:customer_id, :product_id]
@ -310,7 +310,7 @@ $ bin/rails generate model Product name:string description:text
This will create a migration that looks like this: This will create a migration that looks like this:
```ruby ```ruby
class CreateProducts < ActiveRecord::Migration[7.2] class CreateProducts < ActiveRecord::Migration[8.0]
def change def change
create_table :products do |t| create_table :products do |t|
t.string :name t.string :name
@ -338,7 +338,7 @@ $ bin/rails generate migration AddDetailsToProducts 'price:decimal{5,2}' supplie
will produce a migration that looks like this will produce a migration that looks like this
```ruby ```ruby
class AddDetailsToProducts < ActiveRecord::Migration[7.2] class AddDetailsToProducts < ActiveRecord::Migration[8.0]
def change def change
add_column :products, :price, :decimal, precision: 5, scale: 2 add_column :products, :price, :decimal, precision: 5, scale: 2
add_reference :products, :supplier, polymorphic: true add_reference :products, :supplier, polymorphic: true
@ -635,7 +635,7 @@ You can create a table with a composite primary key by passing the
`:primary_key` option to `create_table` with an array value: `:primary_key` option to `create_table` with an array value:
```ruby ```ruby
class CreateProducts < ActiveRecord::Migration[7.2] class CreateProducts < ActiveRecord::Migration[8.0]
def change def change
create_table :products, primary_key: [:customer_id, :product_sku] do |t| create_table :products, primary_key: [:customer_id, :product_sku] do |t|
t.integer :customer_id t.integer :customer_id
@ -736,7 +736,7 @@ reverse. You can use [`reversible`][] to specify what to do when running a
migration and what else to do when reverting it. For example: migration and what else to do when reverting it. For example:
```ruby ```ruby
class ExampleMigration < ActiveRecord::Migration[7.2] class ExampleMigration < ActiveRecord::Migration[8.0]
def change def change
create_table :distributors do |t| create_table :distributors do |t|
t.string :zipcode t.string :zipcode
@ -786,7 +786,7 @@ reverse order they were made in the `up` method. The example in the `reversible`
section is equivalent to: section is equivalent to:
```ruby ```ruby
class ExampleMigration < ActiveRecord::Migration[7.2] class ExampleMigration < ActiveRecord::Migration[8.0]
def up def up
create_table :distributors do |t| create_table :distributors do |t|
t.string :zipcode t.string :zipcode
@ -832,7 +832,7 @@ You can use Active Record's ability to rollback migrations using the [`revert`][
```ruby ```ruby
require_relative "20121212123456_example_migration" require_relative "20121212123456_example_migration"
class FixupExampleMigration < ActiveRecord::Migration[7.2] class FixupExampleMigration < ActiveRecord::Migration[8.0]
def change def change
revert ExampleMigration revert ExampleMigration
@ -850,7 +850,7 @@ For example, let's imagine that `ExampleMigration` is committed and it is later
decided that a Distributors view is no longer needed. decided that a Distributors view is no longer needed.
```ruby ```ruby
class DontUseDistributorsViewMigration < ActiveRecord::Migration[7.2] class DontUseDistributorsViewMigration < ActiveRecord::Migration[8.0]
def change def change
revert do revert do
# copy-pasted code from ExampleMigration # copy-pasted code from ExampleMigration
@ -1048,7 +1048,7 @@ Several methods are provided in migrations that allow you to control all this:
For example, take the following migration: For example, take the following migration:
```ruby ```ruby
class CreateProducts < ActiveRecord::Migration[7.2] class CreateProducts < ActiveRecord::Migration[8.0]
def change def change
suppress_messages do suppress_messages do
create_table :products do |t| create_table :products do |t|
@ -1153,7 +1153,7 @@ When `:ruby` is selected, then the schema is stored in `db/schema.rb`. If you lo
at this file you'll find that it looks an awful lot like one very big migration: at this file you'll find that it looks an awful lot like one very big migration:
```ruby ```ruby
ActiveRecord::Schema[7.2].define(version: 2008_09_06_171750) do ActiveRecord::Schema[8.0].define(version: 2008_09_06_171750) do
create_table "authors", force: true do |t| create_table "authors", force: true do |t|
t.string "name" t.string "name"
t.datetime "created_at" t.datetime "created_at"
@ -1238,7 +1238,7 @@ modify data. This is useful in an existing database that can't be destroyed and
recreated, such as a production database. recreated, such as a production database.
```ruby ```ruby
class AddInitialProducts < ActiveRecord::Migration[7.2] class AddInitialProducts < ActiveRecord::Migration[8.0]
def up def up
5.times do |i| 5.times do |i|
Product.create(name: "Product ##{i}", description: "A product.") Product.create(name: "Product ##{i}", description: "A product.")

@ -183,7 +183,7 @@ With no further work, `bin/rails server` will run our new shiny Rails app:
$ cd my_app $ cd my_app
$ bin/rails server $ bin/rails server
=> Booting Puma => Booting Puma
=> Rails 7.2.0 application starting in development => Rails 8.0.0 application starting in development
=> Run `bin/rails server --help` for more startup options => Run `bin/rails server --help` for more startup options
Puma starting in single mode... Puma starting in single mode...
* Puma version: 6.4.0 (ruby 3.1.3-p185) ("The Eagle of Durango") * Puma version: 6.4.0 (ruby 3.1.3-p185) ("The Eagle of Durango")
@ -415,7 +415,7 @@ If you wish to test out some code without changing any data, you can do that by
```bash ```bash
$ bin/rails console --sandbox $ bin/rails console --sandbox
Loading development environment in sandbox (Rails 7.2.0) Loading development environment in sandbox (Rails 8.0.0)
Any modifications you make will be rolled back on exit Any modifications you make will be rolled back on exit
irb(main):001:0> irb(main):001:0>
``` ```
@ -512,7 +512,7 @@ $ bin/rails destroy model Oops
```bash ```bash
$ bin/rails about $ bin/rails about
About your application's environment About your application's environment
Rails version 7.2.0 Rails version 8.0.0
Ruby version 3.1.0 (x86_64-linux) Ruby version 3.1.0 (x86_64-linux)
RubyGems version 3.3.7 RubyGems version 3.3.7
Rack version 3.0.8 Rack version 3.0.8

@ -599,7 +599,7 @@ To ease the upgrade it's required to add the new default to the
value: value:
```ruby ```ruby
# new_framework_defaults_7_2.rb.tt # new_framework_defaults_8_0.rb.tt
# Rails.application.config.active_job.existing_behavior = false # Rails.application.config.active_job.existing_behavior = false
``` ```

@ -378,7 +378,7 @@ Processing by PostsController#index as HTML
10| # GET /posts/1 or /posts/1.json 10| # GET /posts/1 or /posts/1.json
11| def show 11| def show
=>#0 PostsController#index at ~/projects/rails-guide-example/app/controllers/posts_controller.rb:7 =>#0 PostsController#index at ~/projects/rails-guide-example/app/controllers/posts_controller.rb:7
#1 ActionController::BasicImplicitRender#send_action(method="index", args=[]) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actionpack-7.2.0.alpha/lib/action_controller/metal/basic_implicit_render.rb:6 #1 ActionController::BasicImplicitRender#send_action(method="index", args=[]) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actionpack-8.0.0.alpha/lib/action_controller/metal/basic_implicit_render.rb:6
# and 72 frames (use `bt' command for all frames) # and 72 frames (use `bt' command for all frames)
(rdbg) (rdbg)
``` ```
@ -445,13 +445,13 @@ When used without any options, `backtrace` lists all the frames on the stack:
```rb ```rb
=>#0 PostsController#index at ~/projects/rails-guide-example/app/controllers/posts_controller.rb:7 =>#0 PostsController#index at ~/projects/rails-guide-example/app/controllers/posts_controller.rb:7
#1 ActionController::BasicImplicitRender#send_action(method="index", args=[]) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actionpack-2.0.alpha/lib/action_controller/metal/basic_implicit_render.rb:6 #1 ActionController::BasicImplicitRender#send_action(method="index", args=[]) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actionpack-2.0.alpha/lib/action_controller/metal/basic_implicit_render.rb:6
#2 AbstractController::Base#process_action(method_name="index", args=[]) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actionpack-7.2.0.alpha/lib/abstract_controller/base.rb:214 #2 AbstractController::Base#process_action(method_name="index", args=[]) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actionpack-8.0.0.alpha/lib/abstract_controller/base.rb:214
#3 ActionController::Rendering#process_action(#arg_rest=nil) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actionpack-7.2.0.alpha/lib/action_controller/metal/rendering.rb:53 #3 ActionController::Rendering#process_action(#arg_rest=nil) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actionpack-8.0.0.alpha/lib/action_controller/metal/rendering.rb:53
#4 block in process_action at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actionpack-7.2.0.alpha/lib/abstract_controller/callbacks.rb:221 #4 block in process_action at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actionpack-8.0.0.alpha/lib/abstract_controller/callbacks.rb:221
#5 block in run_callbacks at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/activesupport-7.2.0.alpha/lib/active_support/callbacks.rb:118 #5 block in run_callbacks at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/activesupport-8.0.0.alpha/lib/active_support/callbacks.rb:118
#6 ActionText::Rendering::ClassMethods#with_renderer(renderer=#<PostsController:0x0000000000af78>) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actiontext-7.2.0.alpha/lib/action_text/rendering.rb:20 #6 ActionText::Rendering::ClassMethods#with_renderer(renderer=#<PostsController:0x0000000000af78>) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actiontext-8.0.0.alpha/lib/action_text/rendering.rb:20
#7 block {|controller=#<PostsController:0x0000000000af78>, action=#<Proc:0x00007fd91985f1c0 /Users/st0012/...|} in <class:Engine> (4 levels) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actiontext-7.2.0.alpha/lib/action_text/engine.rb:69 #7 block {|controller=#<PostsController:0x0000000000af78>, action=#<Proc:0x00007fd91985f1c0 /Users/st0012/...|} in <class:Engine> (4 levels) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actiontext-8.0.0.alpha/lib/action_text/engine.rb:69
#8 [C] BasicObject#instance_exec at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/activesupport-7.2.0.alpha/lib/active_support/callbacks.rb:127 #8 [C] BasicObject#instance_exec at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/activesupport-8.0.0.alpha/lib/active_support/callbacks.rb:127
..... and more ..... and more
``` ```

@ -326,6 +326,11 @@
description: > description: >
This guide provides steps to be followed when you upgrade your This guide provides steps to be followed when you upgrade your
applications to a newer version of Ruby on Rails. applications to a newer version of Ruby on Rails.
-
name: Version 8.0 - ?
url: 8_0_release_notes.html
description: Release notes for Rails 8.0.
work_in_progress: true
- -
name: Version 7.2 - ? name: Version 7.2 - ?
url: 7_2_release_notes.html url: 7_2_release_notes.html

@ -135,10 +135,10 @@ run the following in a new terminal:
```bash ```bash
$ rails --version $ rails --version
Rails 7.2.0 Rails 8.0.0
``` ```
If it says something like "Rails 7.2.0", you are ready to continue. If it says something like "Rails 8.0.0", you are ready to continue.
### Creating the Blog Application ### Creating the Blog Application
@ -474,7 +474,7 @@ $ bin/rails console
You should see an `irb` prompt like: You should see an `irb` prompt like:
```irb ```irb
Loading development environment (Rails 7.2.0) Loading development environment (Rails 8.0.0)
irb(main):001:0> irb(main):001:0>
``` ```

@ -114,7 +114,7 @@ You can open the terminal within VScode to verify that Rails is installed:
```bash ```bash
$ rails --version $ rails --version
Rails 7.2.0 Rails 8.0.0
``` ```
You can now continue with the [Getting Started guide](getting_started.md#hello-rails) and You can now continue with the [Getting Started guide](getting_started.md#hello-rails) and

@ -53,7 +53,7 @@ For unsupported series, bug fixes may coincidentally land in a stable branch,
but won't be released in an official version. It is recommended to point your but won't be released in an official version. It is recommended to point your
application at the stable branch using Git for unsupported versions. application at the stable branch using Git for unsupported versions.
**Currently included series:** `7.2.Z`. **Currently included series:** `8.0.Z`.
Security Issues Security Issues
--------------- ---------------
@ -78,7 +78,7 @@ there could be breaking changes in the security release. A security release
should only contain the changes needed to ensure the app is secure so that it's should only contain the changes needed to ensure the app is secure so that it's
easier for applications to remain upgraded. easier for applications to remain upgraded.
**Currently included series:** `7.2.Z`, `7.1.Z`. **Currently included series:** `8.0.Z`, `7.2.Z`.
Severe Security Issues Severe Security Issues
---------------------- ----------------------
@ -87,7 +87,7 @@ For severe security issues all releases in the current major series, and also th
last release in the previous major series will receive patches and new versions. The last release in the previous major series will receive patches and new versions. The
classification of the security issue is judged by the core team. classification of the security issue is judged by the core team.
**Currently included series:** `7.2.Z`, `7.1.Z`, `7.0.Z`, `6.1.Z`. **Currently included series:** `8.0.Z`, `7.2.Z`.
Unsupported Release Series Unsupported Release Series
-------------------------- --------------------------

@ -64,7 +64,7 @@ $ bin/rails app:update
conflict config/application.rb conflict config/application.rb
Overwrite /myapp/config/application.rb? (enter "h" for help) [Ynaqdh] Overwrite /myapp/config/application.rb? (enter "h" for help) [Ynaqdh]
force config/application.rb force config/application.rb
create config/initializers/new_framework_defaults_7_2.rb create config/initializers/new_framework_defaults_8_0.rb
... ...
``` ```
@ -76,6 +76,11 @@ The new Rails version might have different configuration defaults than the previ
To allow you to upgrade to new defaults one by one, the update task has created a file `config/initializers/new_framework_defaults_X.Y.rb` (with the desired Rails version in the filename). You should enable the new configuration defaults by uncommenting them in the file; this can be done gradually over several deployments. Once your application is ready to run with new defaults, you can remove this file and flip the `config.load_defaults` value. To allow you to upgrade to new defaults one by one, the update task has created a file `config/initializers/new_framework_defaults_X.Y.rb` (with the desired Rails version in the filename). You should enable the new configuration defaults by uncommenting them in the file; this can be done gradually over several deployments. Once your application is ready to run with new defaults, you can remove this file and flip the `config.load_defaults` value.
Upgrading from Rails 7.2 to Rails 8.0
-------------------------------------
For more information on changes made to Rails 8.0 please see the [release notes](8_0_release_notes.html).
Upgrading from Rails 7.1 to Rails 7.2 Upgrading from Rails 7.1 to Rails 7.2
------------------------------------- -------------------------------------

@ -334,4 +334,4 @@
*Adrian Hirt* *Adrian Hirt*
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/railties/CHANGELOG.md) for previous changes. Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/railties/CHANGELOG.md) for previous changes.

@ -330,6 +330,8 @@ def load_defaults(target_version)
active_record.validate_migration_timestamps = true active_record.validate_migration_timestamps = true
active_record.automatically_invert_plural_associations = true active_record.automatically_invert_plural_associations = true
end end
when "8.0"
load_defaults "7.2"
else else
raise "Unknown version #{target_version.to_s.inspect}" raise "Unknown version #{target_version.to_s.inspect}"
end end

@ -7,8 +7,8 @@ def self.gem_version
end end
module VERSION module VERSION
MAJOR = 7 MAJOR = 8
MINOR = 2 MINOR = 0
TINY = 0 TINY = 0
PRE = "alpha" PRE = "alpha"

@ -1,68 +0,0 @@
# Be sure to restart your server when you modify this file.
#
# This file eases your Rails 7.2 framework defaults upgrade.
#
# Uncomment each configuration one by one to switch to the new default.
# Once your application is ready to run with all new defaults, you can remove
# this file and set the `config.load_defaults` to `7.2`.
#
# Read the Guide for Upgrading Ruby on Rails for more info on each option.
# https://guides.rubyonrails.org/upgrading_ruby_on_rails.html
###
# Controls whether Active Job's `#perform_later` and similar methods automatically defer
# the job queuing to after the current Active Record transaction is committed.
#
# Example:
# Topic.transaction do
# topic = Topic.create(...)
# NewTopicNotificationJob.perform_later(topic)
# end
#
# In this example, if the configuration is set to `:never`, the job will
# be enqueued immediately, even though the `Topic` hasn't been committed yet.
# Because of this, if the job is picked up almost immediately, or if the
# transaction doesn't succeed for some reason, the job will fail to find this
# topic in the database.
#
# If `enqueue_after_transaction_commit` is set to `:default`, the queue adapter
# will define the behaviour.
#
# Note: Active Job backends can disable this feature. This is generally done by
# backends that use the same database as Active Record as a queue, hence they
# don't need this feature.
#++
# Rails.application.config.active_job.enqueue_after_transaction_commit = :default
###
# Adds image/webp to the list of content types Active Storage considers as an image
# Prevents automatic conversion to a fallback PNG, and assumes clients support WebP, as they support gif, jpeg, and png.
# This is possible due to broad browser support for WebP, but older browsers and email clients may still not support
# WebP. Requires imagemagick/libvips built with WebP support.
#++
# Rails.application.config.active_storage.web_image_content_types = %w[image/png image/jpeg image/gif image/webp]
###
# Enable validation of migration timestamps. When set, an ActiveRecord::InvalidMigrationTimestampError
# will be raised if the timestamp prefix for a migration is more than a day ahead of the timestamp
# associated with the current time. This is done to prevent forward-dating of migration files, which can
# impact migration generation and other migration commands.
#
# Applications with existing timestamped migrations that do not adhere to the
# expected format can disable validation by setting this config to `false`.
#++
# Rails.application.config.active_record.validate_migration_timestamps = true
###
# Controls whether Active Record will automatically look for inverse relations
# with a pluralized name.
#
# Example:
# class Comment < ActiveRecord::Base
# belongs_to :post
# end
#
# In this example, Active Record will try to infer a `:comment` (singular) association
# on `Post`. With this option enabled, it will also look for a `:comments` association.
#++
# Rails.application.config.active_record.automatically_invert_plural_associations = true

@ -0,0 +1,10 @@
# Be sure to restart your server when you modify this file.
#
# This file eases your Rails 8.0 framework defaults upgrade.
#
# Uncomment each configuration one by one to switch to the new default.
# Once your application is ready to run with all new defaults, you can remove
# this file and set the `config.load_defaults` to `8.0`.
#
# Read the Guide for Upgrading Ruby on Rails for more info on each option.
# https://guides.rubyonrails.org/upgrading_ruby_on_rails.html

@ -3,8 +3,6 @@
require "erb" require "erb"
require "cgi" require "cgi"
puts "required tools/preview_docs"
# How to test: # How to test:
# #
# export BUILDKITE_COMMIT="c8b601a225" # export BUILDKITE_COMMIT="c8b601a225"

@ -7,8 +7,8 @@ def self.gem_version
end end
module VERSION module VERSION
MAJOR = 7 MAJOR = 8
MINOR = 2 MINOR = 0
TINY = 0 TINY = 0
PRE = "alpha" PRE = "alpha"