1 Atnaujinimas į Rails 6.1
Jei atnaujinote esamą programą, gerai būtų turėti geras testavimo padengimo galimybes prieš pradedant. Taip pat pirmiausia turėtumėte atnaujinti iki Rails 6.0, jei dar to nedarėte, ir įsitikinti, kad jūsų programa veikia kaip tikėtasi, prieš bandant atnaujinti į Rails 6.1. Atnaujinimo metu reikėtų atkreipti dėmesį į keletą dalykų, kuriuos galima rasti Ruby on Rails atnaujinimo gide.
2 Pagrindinės funkcijos
2.1 Duomenų bazės jungčių keitimas pagal duomenų bazę
Rails 6.1 suteikia galimybę keisti jungtis pagal duomenų bazę. 6.0 versijoje, jei perjungėte į reading
vaidmenį, visos duomenų bazės jungtys taip pat perjungė į skaitymo vaidmenį. Dabar 6.1 versijoje, jei nustatysite legacy_connection_handling
reikšmę į false
savo konfigūracijoje, Rails leis jums perjungti jungtis tik vienai duomenų bazei, iškviesdami connected_to
atitinkamam abstrakčiajam klasei.
2.2 Horizontalus fragmentavimas
Rails 6.0 suteikė galimybę funkcinės fragmentacijos (kelios fragmentacijos, skirtingos schemos) jūsų duomenų bazėje, tačiau negalėjo palaikyti horizontalaus fragmentavimo (ta pati schema, kelios fragmentacijos). Rails negalėjo palaikyti horizontalaus fragmentavimo, nes Active Record modeliai galėjo turėti tik vieną ryšį per vaidmenį per klasę. Tai dabar ištaisyta ir horizontalus fragmentavimas su Rails yra galimas.
2.3 Griežtas ryšių įkėlimas
Griežtas ryšių įkėlimas leidžia užtikrinti, kad visi jūsų ryšiai būtų įkelti iš anksto ir sustabdyti N+1 problemą prieš ją įvykdant.
2.4 Deleguoti tipai
Deleguoti tipai yra alternatyva vienos lentelės paveldėjimui. Tai padeda atvaizduoti klasės hierarchijas, leidžiant, kad viršklas būtų konkreti klasė, kurią atstovauja jos pačios lentelė. Kiekvienai po-klasei yra skirta savo lentelė papildomiems atributams.
2.5 Asinchroninis asociacijų naikinimas
Asinchroninis asociacijų naikinimas suteikia galimybę programoms naikinti asociacijas fone. Tai padeda išvengti laiko limitų ir kitų našumo problemų jūsų programoje naikinant duomenis.
3 Railties
Išsamius pakeitimus rasite Changelog puslapyje.
3.1 Pašalinimai
Pašalinti pasenusi
rake notes
užduotys.Pašalintas pasenusi
connection
parametras išrails dbconsole
komandos.Pašalinta pasenusi
SOURCE_ANNOTATION_DIRECTORIES
aplinkos kintamojo palaikymasrails notes
.Pašalintas pasenusi
server
argumentas išrails server
komandos.Pašalintas pasenusi palaikymas naudoti
HOST
aplinkos kintamąjį, nurodantį serverio IP.Pašalintos pasenusios
rake dev:cache
užduotys.Pašalintos pasenusios
rake routes
užduotys.Pašalintos pasenusios
rake initializers
užduotys.
3.2 Pasenusių funkcijų pažymėjimai
3.3 Svarbūs pakeitimai
4 Action Cable
Išsamius pakeitimus rasite Changelog puslapyje.
4.1 Pašalinimai
4.2 Pasenusių funkcijų pažymėjimai
4.3 Svarbūs pakeitimai
5 Action Pack
Išsamius pakeitimus rasite Changelog puslapyje.
5.1 Pašalinimai
Pašalintas pasenusi
ActionDispatch::Http::ParameterFilter
.Pašalintas pasenusi
force_ssl
kontrolerio lygyje.
5.2 Pasenusių funkcijų pažymėjimai
- Pažymėta kaip pasenusi
config.action_dispatch.return_only_media_type_on_content_type
.
5.3 Svarbūs pakeitimai
- Pakeista
ActionDispatch::Response#content_type
funkcija, kad grąžintų visą Content-Type antraštę.
6 Action View
Išsamius pakeitimus rasite Changelog puslapyje.
6.1 Pašalinimai
Pašalintas pasenusi
escape_whitelist
išActionView::Template::Handlers::ERB
.Pašalintas pasenusi
find_all_anywhere
išActionView::Resolver
.Pašalintas pasenusi
formats
išActionView::Template::HTML
.Pašalintas pasenusi
formats
išActionView::Template::RawFile
.Pašalintas pasenusi
formats
išActionView::Template::Text
.Pašalintas pasenusi
find_file
išActionView::PathSet
.Pašalintas pasenusi
rendered_format
išActionView::LookupContext
.Pašalintas pasenusi
find_file
išActionView::ViewPaths
.Pašalintas pasenusi palaikymas perduoti objektą, kuris nėra
ActionView::LookupContext
, kaip pirmą argumentąActionView::Base#initialize
funkcijoje.Pašalintas pasenusi
format
argumentasActionView::Base#initialize
funkcijoje.Pašalintas pasenusi
ActionView::Template#refresh
funkcija.Pašalintas pasenusi
ActionView::Template#original_encoding
funkcija.Pašalintas pasenusi
ActionView::Template#variants
funkcija.Pašalintas pasenusi
ActionView::Template#formats
funkcija.Pašalintas pasenusi
ActionView::Template#virtual_path=
funkcija.Pašalintas pasenusi
ActionView::Template#updated_at
funkcija.Pašalintas pasenusi
updated_at
argumentas, reikalingasActionView::Template#initialize
funkcijai.Pašalintas pasenusi
ActionView::Template.finalize_compiled_template_methods
funkcija.Pašalintas pasenusi
config.action_view.finalize_compiled_template_methods
palaikymas.Pašalintas pasenusi palaikymas iškviesti
ActionView::ViewPaths#with_fallback
su bloku.Pašalintas pasenusi palaikymas perduoti absoliučius kelius
render template:
.Pašalintas pasenusi palaikymas perduoti santykinius kelius
render file:
.Pašalintas palaikymas šablonų tvarkyklėms, kurios nepriima dviejų argumentų.
Pašalintas pasenusi šablonų argumentas
ActionView::Template::PathResolver
funkcijoje.Pašalintas pasenusi palaikymas iškviesti privačias funkcijas iš objekto kai kuriuose vaizdo pagalbininkuose.
6.2 Pasenusių funkcijų pažymėjimai
6.3 Svarbūs pakeitimai
Reikalaujama, kad
ActionView::Base
paveldėjimą atlikusios klasės įgyvendintų#compiled_method_container
funkciją.Privalomas
locals
argumentasActionView::Template#initialize
funkcijoje.javascript_include_tag
irstylesheet_link_tag
turtiniai pagalbos elementai generuojaLink
antraštę, kuri suteikia moderniems naršyklėms užuominas apie išankstinį turtų įkėlimą. Tai galima išjungti nustatantconfig.action_view.preload_links_header
reikšmę įfalse
.
7 Veiksmų siuntėjas
Išsamioms pakeitimams žiūrėkite Changelog.
7.1 Pašalinimai
- Pašalintas pasenusi
ActionMailer::Base.receive
naudojimas, naudojant Action Mailbox.
7.2 Pasenusių funkcijų pažymėjimai
7.3 Svarbūs pakeitimai
8 Aktyvusis įrašas
Išsamioms pakeitimams žiūrėkite Changelog.
8.1 Pašalinimai
Pašalintos pasenusios funkcijos iš
ActiveRecord::ConnectionAdapters::DatabaseLimits
.column_name_length
table_name_length
columns_per_table
indexes_per_table
columns_per_multicolumn_index
sql_query_length
joins_per_query
Pašalintas pasenusi
ActiveRecord::ConnectionAdapters::AbstractAdapter#supports_multi_insert?
.Pašalintas pasenusi
ActiveRecord::ConnectionAdapters::AbstractAdapter#supports_foreign_keys_in_create?
.Pašalintas pasenusi
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#supports_ranges?
.Pašalintos pasenusios
ActiveRecord::Base#update_attributes
irActiveRecord::Base#update_attributes!
.Pašalintas pasenusi
migrations_path
argumentasActiveRecord::ConnectionAdapter::SchemaStatements#assume_migrated_upto_version
metode.Pašalintas pasenusi
config.active_record.sqlite3.represent_boolean_as_integer
.Pašalintos pasenusios funkcijos iš
ActiveRecord::DatabaseConfigurations
.fetch
each
first
values
[]=
Pašalintas pasenusi
ActiveRecord::Result#to_hash
metodas.Pašalintas pasenusi parametrų perdavimo nepriklausomam SQL naudojimui
ActiveRecord::Relation
metodų metu palaikymas.
8.2 Pasenusių funkcijų pažymėjimai
Pažymėtas pasenusi
ActiveRecord::Base.allow_unsafe_raw_sql
.Pažymėtas pasenusi
database
argumentasconnected_to
metode.Pažymėtas pasenusi
connection_handlers
, kailegacy_connection_handling
nustatytas kaip false.
8.3 Svarbūs pakeitimai
MySQL: Unikalumo tikrinimas dabar atsižvelgia į numatytąją duomenų bazės lygiavimą, pagal numatytąjį nustatymą nebenaudojamas jautrusis raidžių palyginimas.
relation.create
daugiau neleidžia klasės lygio užklausų metodams patekti prie srities inicializavimo bloko ir atgalinio iškvietimo metu.Prieš tai:
User.where(name: "John").create do |john| User.find_by(name: "David") # => nil end
Po to:
User.where(name: "John").create do |john| User.find_by(name: "David") # => #<User name: "David", ...> end
Vardinių sričių grandinė daugiau neleidžia klasės lygio užklausų metodams patekti prie srities.
class User < ActiveRecord::Base scope :david, -> { User.where(name: "David") } end
Prieš tai:
User.where(name: "John").david # SELECT * FROM users WHERE name = 'John' AND name = 'David'
Po to:
User.where(name: "John").david # SELECT * FROM users WHERE name = 'David'
where.not
dabar generuoja NAND predikatus, o ne NOR.Prieš tai:
User.where.not(name: "Jon", role: "admin") # SELECT * FROM users WHERE name != 'Jon' AND role != 'admin'
Po to:
User.where.not(name: "Jon", role: "admin") # SELECT * FROM users WHERE NOT (name = 'Jon' AND role = 'admin')
Norint naudoti naująją duomenų bazės ryšio tvarkymą, programos turi pakeisti
legacy_connection_handling
į false ir pašalinti pasenusius prieigos metodusconnection_handlers
. Vieši metodaiconnects_to
irconnected_to
nereikalauja jokių pakeitimų.Aktyvus saugojimas
Išsamius pakeitimus žiūrėkite Changelog.
8.4 Pašalinimai
Pašalintas pasenusi palaikymas perduoti
:combine_options
operacijas įActiveStorage::Transformers::ImageProcessing
.Pašalintas pasenusi
ActiveStorage::Transformers::MiniMagickTransformer
.Pašalintas pasenusi
config.active_storage.queue
.Pašalintas pasenusi
ActiveStorage::Downloading
.
8.5 Pasenusi funkcionalumas
- Pasenusa
Blob.create_after_upload
funkcija pakeista įBlob.create_and_upload
. (Pull Request)
8.6 Svarbūs pakeitimai
- Pridėta
Blob.create_and_upload
funkcija, skirta sukurti naują blob ir įkelti duotąio
į paslaugą. (Pull Request) - Pridėta
ActiveStorage::Blob#service_name
stulpelis. Po atnaujinimo reikalinga paleisti migraciją. Paleiskitebin/rails app:update
, kad būtų sugeneruota migracija.
9 Aktyvus modelis
Išsamius pakeitimus žiūrėkite Changelog.
9.1 Pašalinimai
9.2 Pasenusi funkcionalumas
9.3 Svarbūs pakeitimai
- Aktyvaus modelio klaidos dabar yra objektai, turintys sąsają, leidžiančią jūsų programai lengviau tvarkyti ir sąveikauti su modelių metu iškeltomis klaidomis. Ši funkcija apima užklausos sąsają, leidžia tiksliau testuoti ir gauti klaidos informaciją.
10 Aktyvus palaikymas
Išsamius pakeitimus žiūrėkite Changelog.
10.1 Pašalinimai
Pašalintas pasenusi atsarginis
I18n.default_locale
naudojimas, kaiconfig.i18n.fallbacks
yra tuščias.Pašalinta pasenusi
LoggerSilence
konstanta.Pašalinta pasenusi
ActiveSupport::LoggerThreadSafeLevel#after_initialize
funkcija.Pašalintos pasenusios
Module#parent_name
,Module#parent
irModule#parents
funkcijos.Pašalintas pasenusi failas
active_support/core_ext/module/reachable
.Pašalintas pasenusi failas
active_support/core_ext/numeric/inquiry
.Pašalintas pasenusi failas
active_support/core_ext/array/prepend_and_append
.Pašalintas pasenusi failas
active_support/core_ext/hash/compact
.Pašalintas pasenusi failas
active_support/core_ext/hash/transform_values
.Pašalintas pasenusi failas
active_support/core_ext/range/include_range
.Pašalintos pasenusios
ActiveSupport::Multibyte::Chars#consumes?
irActiveSupport::Multibyte::Chars#normalize
funkcijos.Pašalintos pasenusios
ActiveSupport::Multibyte::Unicode.pack_graphemes
,ActiveSupport::Multibyte::Unicode.unpack_graphemes
,ActiveSupport::Multibyte::Unicode.normalize
,ActiveSupport::Multibyte::Unicode.downcase
,ActiveSupport::Multibyte::Unicode.upcase
irActiveSupport::Multibyte::Unicode.swapcase
funkcijos.Pašalinta pasenusi
ActiveSupport::Notifications::Instrumenter#end=
funkcija.
10.2 Pasenusi funkcionalumas
- Pasenusa
ActiveSupport::Multibyte::Unicode.default_normalization_form
funkcija.
10.3 Svarbūs pakeitimai
11 Aktyvus darbas
Išsamius pakeitimus žiūrėkite Changelog.
11.1 Pašalinimai
11.2 Pasenusi funkcionalumas
- Pasenusa
config.active_job.return_false_on_aborted_enqueue
funkcija.
11.3 Svarbūs pakeitimai
- Grąžinti
false
, kai darbo įtraukimas į eilę yra nutrauktas.
12 Veiksmo tekstas
Išsamius pakeitimus žiūrėkite Changelog.
12.1 Pašalinimai
12.2 Pasenusi funkcionalumas
12.3 Svarbūs pakeitimai
Pridėta funkcija, patvirtinanti turtingojo teksto turinio buvimą, pridedant
?
po turtingojo teksto atributo pavadinimo. (Pull Request)Pridėtas
fill_in_rich_text_area
sistemos testo pagalbininkas, skirtas rasti trix redaktorių ir užpildyti jį duotu HTML turiniu. (Pull Request)Pridėta
ActionText::FixtureSet.attachment
funkcija, skirta generuoti<action-text-attachment>
elementus duomenų bazės fiksuose. (Pull Request)
13 Veiksmo pašto dėžutė
Išsamius pakeitimus žiūrėkite Changelog.
13.1 Pašalinimai
13.2 Nustatymų pasenusių funkcijų
- Nustatyti
Rails.application.credentials.action_mailbox.api_key
irMAILGUN_INGRESS_API_KEY
kaip pasenusius, naudotiRails.application.credentials.action_mailbox.signing_key
irMAILGUN_INGRESS_SIGNING_KEY
vietoje.
13.3 Svarbūs pakeitimai
14 Ruby on Rails vadovai
Išsamesnius pakeitimus žiūrėkite Keitimų žurnale.
14.1 Svarbūs pakeitimai
15 Autoriai
Žiūrėkite pilną sąrašą prisidėjusių prie Rails žmonių, kurie daug valandų skyrė kurti Rails, stabilų ir patikimą karkasą. Jie visi nusipelno pagyrimo.
Atsiliepimai
Jūs esate skatinami padėti pagerinti šio vadovo kokybę.
Prašome prisidėti, jei pastebite rašybos klaidų ar faktinių klaidų. Norėdami pradėti, galite perskaityti mūsų dokumentacijos prisidėjimo skyrių.
Taip pat gali būti nepilnos informacijos arba informacijos, kuri nėra atnaujinta. Prašome pridėti bet kokią trūkstamą dokumentaciją pagrindiniam. Patikrinkite Edge vadovus pirmiausia, ar problemas jau išspręsta arba ne pagrindinėje šakoje. Patikrinkite Ruby on Rails vadovų gaires dėl stiliaus ir konvencijų.
Jei dėl kokios nors priežasties pastebite kažką, ką reikia ištaisyti, bet negalite patys tai pataisyti, prašome pranešti apie problemą.
Ir galiausiai, bet ne mažiau svarbu, bet koks diskusijos dėl Ruby on Rails dokumentacijos yra labai laukiamos oficialiame Ruby on Rails forume.